我们公司的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()
分享到:
相关推荐
email-spec, 在使用ActionMailer或者Pony的ruby 应用中,收集 testing/minitest匹配器的集合和用于测试电子邮件的Cucumber 步骤 电子邮件规范用于 RSpec 。MiniTest 和 Cucumber 步骤的匹配器集合,使测试邮件顺利...
mail_safe 在开发使用ActionMailer的应用程序时,邮件保险箱提供了一个安全网。 它可以防止电子邮件逃逸。 一旦安装并配置了该gem,就可以确保您的应用不会将电子邮件发送到外部电子邮件地址。 取而代之的是,通常会...
actionmailer-2.3.5.gem
capybara-email, 使用Capybara测试你的ActionMailer和Mailer消息 CapybaraEmail 轻松测试 ActionMailer 和邮件在你的集成测试中安装将此行添加到你的应用程序的Gemfile中:gem 'capybara-email'然后执行: $ bund
ResqueMailer 一个gem插件,允许ActionMailer准备的消息异步传递。 假设您正在使用进行后台作业。 请注意,Resque :: Mailer的最新(2.0+)版本仅适用于Rails 3.x或更高版本。 对于与Rails 2兼容的版本,在Gemfile中...
一个ActionMailer适配器,可使用SendGrid的HTTPS Web API(而不是SMTP)发送电子邮件。 与Rails 5和Sendgrid API v3兼容。 安装 将此行添加到您的应用程序的Gemfile中: gem 'sendgrid-actionmailer' 用法 为您的...
actionmailer-2.3.11 安装redmine必须的gem插件
把它想象成 ActionMailer,但用于定时电子邮件序列。 它还可以执行其他操作,例如发送短信。 入门 开始使用 Heya 很容易: 安装 Heya gem 将此行添加到应用程序的 Gemfile 中: gem "heya" , github : "honey...
它提供了一个delivery_method基于SparkPost API,使越来越设置,并通过SparkPost在Rails应用程序相当简单发送电子邮件。 入门 将宝石添加到您的Gemfile gem 'sparkpost_rails' 然后运行bundle命令进行安装。 ...
滴头 使用基于规则的滴灌广告系列系统来干燥您的邮件程序代码,该系统可与Rails和ActionMailer一起使用。好处: 从控制器中删除邮件状态逻辑依靠活动记录范围以DRY方式制作复杂的DRIP广告系列为什么: 我需要一个...
我的任务是保存我们发送给用户的所有电子邮件-当然不是内容,而是至少电子邮件和主题(或模板)。 如果您发送大量电子邮件并想知道该特定用户收到了哪些电子邮件,这将非常有用。 一种简单的方法是在每个...
如果您要结合自动浏览器解决方案(例如Selenium)来测试电子邮件,则需要在测试环境中使用 。 (这是因为您的测试过程和服务器过程是不同的,因此需要电子邮件的中间存储。)ActiveRecord Mailer也可以使用,但是...
尽管使用 Mass Mandrill 发送电子邮件看起来像使用 ActionMailer 发送电子邮件,但 Mass Mandrill 不依赖于 Rails,它可以在非 Rails 应用程序中使用。 Mass Mandrill 支持批量电子邮件发送和 Mandrill 模板。 要...
送货上门这个插件满足了一个简单的需求:在开发或试生产中,你将能够控制你的应用程序发送的任何邮件的收件人,而不管真正的收件人是什么。 这个插件提供了一种方法来覆盖真实到:cc: 和 bcc: 收件人,并在交付时...
Postmark Rails Gem是ActionMailer通过发送电子邮件的插件。 该gem的创建旨在实现快速实施,并完全支持所有。用法请参阅以获取有关库功能的详细说明。 有关一般Postmark API的详细信息,请查看。要求您将需要设置一...
用于通知的电子邮件通知程序,不依赖于 ActionMailer,可以在 Rails 之外使用,即与 Grape 一起使用。 截至目前,它仅支持文本电子邮件。 作为一种传递方法,它可以使用或或您定义的自定义方法。 为什么? 我已经...
继承现有Rails邮件中的MandrillMailer类,以使用其基于模板的电子邮件通过Mandrill发送事务性电子邮件。 安装 将此行添加到您的应用程序的Gemfile中: gem 'mandrill_mailer' 然后执行: $ bundle install 或将其...
电子邮件样式不仅是链接到样式表的问题。 大多数客户端(尤其是Web客户端)会忽略HTML中的链接样式表或<style>标签。 解决方法是在电子邮件中每个标签的style属性中编写所有CSS规则。 这是一种非常乏味且难以...
松弛::邮件ActionMailer启发了消息对象。用法将Gemfile gem 'slack-mail'添加到您的Gemfile并安装它。 # Basic usage.Slack :: Mail . new ( text : "..." ) . deliver_now# Using `ActiveJob` to send async (if ...
除了通过mailgun-ruby轻松集成之外,没有其他特殊原因,因为它们有免费计划,每月发送的邮件过多,目的是偶尔发送电子邮件警报。 由于免费计划不允许临时发送,因此有必要在mailgun帐户设置中将警报接收者添加为。...