首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络技术 > 网络基础 >

actionmailer发送邮件失败的有关问题解决记录

2012-12-20 
actionmailer发送邮件失败的问题解决记录我们公司的WLAN网管采用ruby on rails架构,同时通过actionmailer

actionmailer发送邮件失败的问题解决记录

我们公司的WLAN网管采用ruby on rails架构,同时通过actionmailer自动发送邮件。

近来吉林电信遇到了点问题,导致邮件发送不出去,总结的话主要是两个问题。

第一个问题是:邮件内容编码的问题。

通过activerecord查询上来的的内容不是UTF-8编码的,需要把他进行转换,这个在其他现场没有发现,吉林是32的服务器,然后环境是另外一个同事装的,应该跟环境也有一定的问题。

?

解决方案:通过

def scanadd( str, force = false )
????? types = ''
????? strs = []
????? if str.respond_to?(:encoding)
??????? enc = str.encoding
??????? str.force_encoding("UTF-8")
????? end

?

force_encoding的方法把字符集进行替换。

?

第二个问题是: gmail不发邮件的问题

gmail的smtp服务器是要https的,所以要通过require "smtp_tls"来的,研发把这个东西给禁用掉了,导致邮件发送不了。

?

解决方案:? gem install -l? action_mailer_tls-1.1.3.gem --no-ri --no-rdoc

然后在 app/model/user_mailer.rb中

?

require 'smtp_tls'

module ActionMailer
? module Quoting #:nodoc:
??? def quote_if_necessary(text, charset)
????? text = text.dup.force_encoding("UTF-8") if text.respond_to?(:force_encoding)
????? (text =~ CHARS_NEEDING_QUOTING) ?
??????? quoted_printable(text, charset) :
??????? text
??? end
? end
end

module TMail
? class Encoder
??? def scanadd( str, force = false )
????? types = ''
????? strs = []
????? if str.respond_to?(:encoding)
??????? enc = str.encoding
??????? str.force_encoding("UTF-8")
????? end
????? until str.empty?
??????? if m = /\A[^\e\t\r\n ]+/.match(str)
????????? types << (force ? 'j' : 'a')
????????? if str.respond_to?(:encoding)
??????????? strs.push m[0].force_encoding(enc)
????????? else
??????????? strs.push m

……

?

故障解决。

?

?

测试参考:

在Rails console中可以使用ActionMailer::Base.smtp_settings查看当前环境的smtp设置。:

# ruby script/console
Loading development environment (Rails 2.3.5)
=>
?> ActionMailer::Base.smtp_settings
=> {:password=>"**********", :address=>"smtp.gmail.com", :port=>587, :authentication=>:plain, :user_name=>"jilin.wlan@gmail.com"}
>>

?

?

?

# 设置邮件内容的默认编码集
ActionMailer::Base.default_charset = "UTF-8"
# 定义ActionMailer::Base的子类
class SimpleMailer < ActionMailer::Base
? # 定义一个自定义方法
? def simple_message()
??? # 设置发件人地址
??? from 'caoruijian@stos.com'
??? # 设置收件人地址
??? recipients 'caoruijian@stos.com'
??? # 设置邮件标题
??? subject 'Hello rails email'
??? # 设置邮件内容
??? body "This is content! Send time at #{Time.now}, 看到的这是中文"
? end
end
# 创建邮件,并发送
SimpleMailer.deliver_simple_message()

?

?

actionmailer发送邮件失败的有关问题解决记录

actionmailer发送邮件失败的有关问题解决记录

热点排行
Bad Request.