Improved sending emails.
This commit is contained in:
parent
b582794ea7
commit
80307158b6
4 changed files with 51 additions and 45 deletions
|
@ -2,15 +2,15 @@
|
||||||
|
|
||||||
require 'mail'
|
require 'mail'
|
||||||
|
|
||||||
class Channel::EmailBuild
|
module Channel::EmailBuild
|
||||||
|
|
||||||
=begin
|
=begin
|
||||||
|
|
||||||
backend = Channel::EmailBuild.new
|
mail = Channel::EmailBuild.build(
|
||||||
mail = backend.send(
|
:from => 'sender@example.com',
|
||||||
:from => 'sender@example.com',
|
:to => 'recipient@example.com',
|
||||||
:to => 'recipient@example.com',
|
:body => 'somebody with some text',
|
||||||
:body => 'somebody with some text',
|
:content_type => 'text/plain',
|
||||||
)
|
)
|
||||||
|
|
||||||
=end
|
=end
|
||||||
|
@ -50,7 +50,7 @@ class Channel::EmailBuild
|
||||||
end
|
end
|
||||||
|
|
||||||
# generate plain part
|
# generate plain part
|
||||||
attr[:body] = html2text( attr[:body] )
|
attr[:body] = attr[:body].html2text
|
||||||
end
|
end
|
||||||
|
|
||||||
# add plain text part
|
# add plain text part
|
||||||
|
@ -71,38 +71,4 @@ class Channel::EmailBuild
|
||||||
end
|
end
|
||||||
mail
|
mail
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
# from https://gist.github.com/petrblaho/657856
|
|
||||||
def html2text(html)
|
|
||||||
text = html.
|
|
||||||
gsub(/( |\n|\s)+/im, ' ').squeeze(' ').strip.
|
|
||||||
gsub(/<([^\s]+)[^>]*(src|href)=\s*(.?)([^>\s]*)\3[^>]*>\4<\/\1>/i, '\4')
|
|
||||||
|
|
||||||
links = []
|
|
||||||
linkregex = /<[^>]*(src|href)=\s*(.?)([^>\s]*)\2[^>]*>\s*/i
|
|
||||||
while linkregex.match(text)
|
|
||||||
links << $~[3]
|
|
||||||
text.sub!(linkregex, "[#{links.size}]")
|
|
||||||
end
|
|
||||||
|
|
||||||
text = CGI.unescapeHTML(
|
|
||||||
text.
|
|
||||||
gsub(/<(script|style)[^>]*>.*<\/\1>/im, '').
|
|
||||||
gsub(/<!--.*-->/m, '').
|
|
||||||
gsub(/<hr(| [^>]*)>/i, "___\n").
|
|
||||||
gsub(/<li(| [^>]*)>/i, "\n* ").
|
|
||||||
gsub(/<blockquote(| [^>]*)>/i, '> ').
|
|
||||||
gsub(/<(br)(| [^>]*)>/i, "\n").
|
|
||||||
gsub(/<(\/h[\d]+|p)(| [^>]*)>/i, "\n\n").
|
|
||||||
gsub(/<[^>]*>/, '')
|
|
||||||
).lstrip.gsub(/\n[ ]+/, "\n") + "\n"
|
|
||||||
|
|
||||||
for i in (0...links.size).to_a
|
|
||||||
text = text + "\n [#{i+1}] <#{CGI.unescapeHTML(links[i])}>" unless links[i].nil?
|
|
||||||
end
|
|
||||||
links = nil
|
|
||||||
text
|
|
||||||
end
|
|
||||||
end
|
end
|
|
@ -1,6 +1,7 @@
|
||||||
# Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
|
# Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
|
||||||
|
|
||||||
class Channel::Sendmail < Channel::EmailBuild
|
class Channel::Sendmail
|
||||||
|
include Channel::EmailBuild
|
||||||
def send(attr, channel, notification = false)
|
def send(attr, channel, notification = false)
|
||||||
|
|
||||||
# return if we run import mode
|
# return if we run import mode
|
||||||
|
|
|
@ -1,12 +1,13 @@
|
||||||
# Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
|
# Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
|
||||||
|
|
||||||
class Channel::SMTP < Channel::EmailBuild
|
class Channel::SMTP
|
||||||
|
include Channel::EmailBuild
|
||||||
def send(attr, channel, notification = false)
|
def send(attr, channel, notification = false)
|
||||||
|
|
||||||
# return if we run import mode
|
# return if we run import mode
|
||||||
return if Setting.get('import_mode')
|
return if Setting.get('import_mode')
|
||||||
|
|
||||||
mail = build(attr, notification)
|
mail = self.build(attr, notification)
|
||||||
mail.delivery_method :smtp, {
|
mail.delivery_method :smtp, {
|
||||||
:openssl_verify_mode => 'none',
|
:openssl_verify_mode => 'none',
|
||||||
:address => channel[:options][:host],
|
:address => channel[:options][:host],
|
||||||
|
|
|
@ -38,4 +38,42 @@ class String
|
||||||
}
|
}
|
||||||
.join('')
|
.join('')
|
||||||
end
|
end
|
||||||
|
|
||||||
|
=begin
|
||||||
|
|
||||||
|
text = html_string.html2text
|
||||||
|
|
||||||
|
=end
|
||||||
|
|
||||||
|
# from https://gist.github.com/petrblaho/657856
|
||||||
|
def html2text
|
||||||
|
text = self.
|
||||||
|
gsub(/( |\n|\s)+/im, ' ').squeeze(' ').strip.
|
||||||
|
gsub(/<([^\s]+)[^>]*(src|href)=\s*(.?)([^>\s]*)\3[^>]*>\4<\/\1>/i, '\4')
|
||||||
|
|
||||||
|
links = []
|
||||||
|
linkregex = /<[^>]*(src|href)=\s*(.?)([^>\s]*)\2[^>]*>\s*/i
|
||||||
|
while linkregex.match(text)
|
||||||
|
links << $~[3]
|
||||||
|
text.sub!(linkregex, "[#{links.size}]")
|
||||||
|
end
|
||||||
|
|
||||||
|
text = CGI.unescapeHTML(
|
||||||
|
text.
|
||||||
|
gsub(/<(script|style)[^>]*>.*<\/\1>/im, '').
|
||||||
|
gsub(/<!--.*-->/m, '').
|
||||||
|
gsub(/<hr(| [^>]*)>/i, "___\n").
|
||||||
|
gsub(/<li(| [^>]*)>/i, "\n* ").
|
||||||
|
gsub(/<blockquote(| [^>]*)>/i, '> ').
|
||||||
|
gsub(/<(br)(| [^>]*)>/i, "\n").
|
||||||
|
gsub(/<(\/h[\d]+|p)(| [^>]*)>/i, "\n\n").
|
||||||
|
gsub(/<[^>]*>/, '')
|
||||||
|
).lstrip.gsub(/\n[ ]+/, "\n") + "\n"
|
||||||
|
|
||||||
|
for i in (0...links.size).to_a
|
||||||
|
text = text + "\n [#{i+1}] <#{CGI.unescapeHTML(links[i])}>" unless links[i].nil?
|
||||||
|
end
|
||||||
|
links = nil
|
||||||
|
text
|
||||||
|
end
|
||||||
end
|
end
|
Loading…
Reference in a new issue