trabajo-afectivo/app/models/channel/email_build.rb

166 lines
4.1 KiB
Ruby
Raw Normal View History

2014-02-03 19:23:00 +00:00
# Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
require 'mail'
2014-12-27 15:25:58 +00:00
module Channel::EmailBuild
2014-12-27 14:07:49 +00:00
=begin
2014-12-27 15:25:58 +00:00
mail = Channel::EmailBuild.build(
:from => 'sender@example.com',
:to => 'recipient@example.com',
:body => 'somebody with some text',
:content_type => 'text/plain',
2014-12-27 14:07:49 +00:00
)
=end
def self.build(attr, notification = false)
mail = Mail.new
# set organization
organization = Setting.get('organization')
if organization
2012-07-28 16:36:47 +00:00
mail['Organization'] = organization.to_s
end
2012-08-06 06:29:54 +00:00
# notification
if notification
attr['X-Loop'] = 'yes'
attr['Precedence'] = 'bulk'
attr['Auto-Submitted'] = 'auto-generated'
attr['X-Auto-Response-Suppress'] = 'All'
end
2012-08-06 06:29:54 +00:00
2014-12-27 14:07:49 +00:00
#attr['X-Powered-BY'] = 'Zammad - Support/Helpdesk (http://www.zammad.org/)'
attr['X-Mailer'] = 'Zammad Mail Service (1.x)'
2012-08-06 06:29:54 +00:00
# set headers
2014-12-27 14:07:49 +00:00
attr.each do |key, value|
next if key.to_s == 'attachments'
next if key.to_s == 'body'
next if key.to_s == 'content_type'
mail[key.to_s] = if value && value.class != Array
value.to_s
else
value
end
2014-12-27 14:07:49 +00:00
end
# add html part
if attr[:content_type] && attr[:content_type] == 'text/html'
2014-12-30 14:08:20 +00:00
html_alternative = Mail::Part.new do
2014-12-27 14:07:49 +00:00
content_type 'text/html; charset=UTF-8'
2014-12-29 15:39:59 +00:00
# complete check
2015-01-08 14:55:52 +00:00
html_document = Channel::EmailBuild.html_complete_check( attr[:body] )
2014-12-29 15:39:59 +00:00
2015-01-08 14:55:52 +00:00
body html_document
end
2014-12-27 14:07:49 +00:00
# generate plain part
2014-12-27 15:25:58 +00:00
attr[:body] = attr[:body].html2text
end
2014-12-27 14:07:49 +00:00
# add plain text part
2014-12-30 14:08:20 +00:00
text_alternative = Mail::Part.new do
2014-12-27 14:07:49 +00:00
content_type 'text/plain; charset=UTF-8'
body attr[:body]
end
2014-12-30 14:08:20 +00:00
# build email without any attachments
if !html_alternative && ( !attr[:attachments] || attr[:attachments].empty? )
mail.content_type 'text/plain; charset=UTF-8'
mail.body attr[:body]
return mail
end
# build email with attachments
alternative_bodies = Mail::Part.new { content_type 'multipart/alternative' }
alternative_bodies.add_part text_alternative
if html_alternative
html_container = Mail::Part.new { content_type 'multipart/related' }
html_container.add_part html_alternative
alternative_bodies.add_part html_container
# place to add inline attachments related to html alternative
end
mail.add_part alternative_bodies
# add attachments
if attr[:attachments]
attr[:attachments].each do |attachment|
2014-12-30 14:08:20 +00:00
if attachment.class == Hash
attachment['content-id'] = nil
mail.attachments[ attachment[:filename] ] = attachment
else
mail.attachments[attachment.filename] = {
:content_type => attachment.preferences['Content-Type'],
:mime_type => attachment.preferences['Mime-Type'],
:content => attachment.content,
'content-id' => nil,
}
end
end
end
2014-10-22 21:00:11 +00:00
mail
end
2014-12-29 15:39:59 +00:00
=begin
full_html_document_string = Channel::EmailBuild.html_complete_check( html_string )
=end
def self.html_complete_check(html)
return html if html =~ /<html>/i
2015-01-08 23:01:41 +00:00
css = "font-family:'Helvetica Neue', Helvetica, Arial, Geneva, sans-serif; font-size: 12px;"
2014-12-29 15:39:59 +00:00
html = <<HERE
<!DOCTYPE html>
<html>
<head>
2014-12-29 23:31:57 +00:00
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
2015-01-08 23:01:41 +00:00
<style type="text/css">
body {
width:90% !important;
-webkit-text-size-adjust:90%;
-ms-text-size-adjust:90%;
#{css};
}
img {
outline:none; text-decoration:none; -ms-interpolation-mode: bicubic;
}
a img {
border:none;
}
table td {
border-collapse: collapse;
}
table {
2015-01-09 11:53:44 +00:00
border-collapse: collapse; mso-table-lspace:0pt; mso-table-rspace:0pt;
}
p, table, div, td {
max-width: 600px;
2015-01-08 23:01:41 +00:00
}
p {
margin: 0;
}
2015-01-09 11:53:44 +00:00
blockquote, pre {
margin: 0px;
padding: 8px 12px 8px 12px;
2015-01-08 23:01:41 +00:00
}
2015-01-09 11:53:44 +00:00
2015-01-08 23:01:41 +00:00
</style>
2014-12-29 15:39:59 +00:00
<head>
2014-12-29 17:21:41 +00:00
<body style="#{css}">#{html}</body>
2014-12-29 15:39:59 +00:00
</html>
HERE
html
end
end