新手问题 [ 已解决 ] ActionMailer 的 smtp_setting,是否只要用一个邮箱的账号和密码,就能用?

chairy11 · 2015年02月10日 · 最后由 chairy11 回复于 2015年02月15日 · 6710 次阅读

新问题

用 ActionMailer 来发邮件,我用自己的 gmail 个人账号来设置 smtp,发送邮件成功。

这是不是说明,只要有一个邮箱的账号密码,就能以那个邮箱的名义去发邮件?

那我想试试公司邮箱个人账号,结果却出错了。

config.action_mailer.delivery_method = :smtp
  config.action_mailer.smtp_settings = {
      address:              'mail.xxx.com.cn',
      port:                 25,
      domain:               'example.com',
      user_name:            '[email protected]',
      password:             'xxx',
      authentication:       'plain',
      enable_starttls_auto: true
  }

会提示我说

OpenSSL::SSL::SSLError: hostname "mail.xxx.com.cn" does not match the server certificate

后来我就加了句openssl_verify_mode: OpenSSL::SSL::VERIFY_NONE 结果提示我:

Net::SMTPFatalError: 554 5.7.1 Error: deny openrelay from xxx.xxx.xxx.xxx

你们觉得哪里需要改下设置呢?是不是邮件服务器那边要设置下?比如在 DNS 设置什么 MX 之类?

解决方案

暂时申请了一个新的 gmail 帐号,专门用来发邮件…

旧问题

想学使用 Rails 自带的邮件系统,脑子乱乱的:

  1. 要先搭建邮件服务器吗? 我看了看《鸟哥的 Linux 私房菜——服务器架设篇》里的 22 章:邮件服务器,感觉好复杂,都看不下去,就怕一不小心设置不当,被弄成 Open Relay,变成垃圾邮件中转站怎么办?

  2. 要设置 DNS 吗? 以前好像尝试过用 QQ 企业邮箱的,所以在 DNSPod 设置了 MX 相关的东东(但没实际使用过),用 ActionMailer 的话,也要设置的吗?

  3. 如果我只发邮件不收呢?有哪些步骤又能省却?

    目前我看我用的主机上是装了 postfix 的,但没有设置。看 Rails 的教程好像也没有提到要设置什么。难道 rails 内置类似 postfix 之类的邮件服务器的功能? 教程中提到 Rails 通过 SMTP (port 25) 发送邮件,我需要在哪里设置什么? 目前我只知道:

    $ netstat -tlnp | grep  :25
    tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      2066/master         
    tcp        0      0 ::1:25                      :::*                        LISTEN      2066/master
    

旧问题解决方案

借用第三方的邮件服务器。最好能借用公司的……(但公司的邮箱系统我无法控制,是上级公司负责的)

#1 楼 @Peter 木有回答我问题呀……看完还是一头雾水。 其实我这边就是一个蛋疼的小需求,每周发邮件去提醒一些用户,数量可能也就是几十封。 然后我看好像 Rails 说得 Mail 相关设置很简单似的,我就想知道背后是不是还有别的需要支撑的东西……好吧,我还没有一个完整的认识……

不要自己搭邮件服务器,如果一周只有几十封,用 QQ 邮件就可以了,帖子里提到的其它国外的 sendgrid 和国内的 https://sendcloud.sohu.com/ 都有免费额度,设置一下 mx 就可以

#3 楼 @Peter 那如果用的是外面的邮件服务器的话,意思是,不用 Rails 里的 ActionMailer 吗?直接相当于使用一个独立邮箱吗?

1. 要先搭建邮件服务器吗? 不用,邮件服务器是最麻烦的服务器之一,自建吃力不讨好,用现成的服务即可。

2. 要设置DNS吗? 用现成的服务,当然不用管什么 DNS。

3. 如果我只发邮件不收呢?有哪些步骤又能省却? 用现成的服务,步骤已经省无可省了。

我自己用的是 MANDRILL , 只需在 config/environments/production.rb 里面配置几行即可,具体方法键 http://help.mandrill.com/entries/21738467-Using-Mandrill-s-SMTP-integration-with-Web-Frameworks

ActionMailer 跟 邮件服务器 不是在同一个抽象层上的东西,你把它想像成另一套 ApplicaitonController / ActionView 就差不多了。具体怎么做篇幅太长,你看看 https://www.railstutorial.org/book/account_activation_password_reset#sec-account_activation_mailer 这一段吧。

补充:又看了下你的回复,你对邮件服务器和 ActionMailer 的理解有误,邮件服务器是邮递员,只管把信件按着地址派送出去;ActionMailer 是写信的人,管得是信的内容,发信的时机,以及在信封上写地址等等

#6 楼 @blacktulip 哦,谢谢,原来“ActionMailer 是写信的人,管得是信的内容,发信的时机,以及在信封上写地址等”,比喻得真好! 我在跟着 guide 一步步做呢。等我处理完写信的方法,再折腾发信的方法。

如果是自己玩,gmail 就差不多了。 action mailer

config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
  address:              'smtp.gmail.com',
  port:                 587,
  domain:               'example.com',
  user_name:            '<username>',
  password:             '<password>',
  authentication:       'plain',
  enable_starttls_auto: true
}

@chairy11 mailgun 挺好用的,我刚用上,不过就是 qq 邮箱很难收到

#8 楼 @flowerwrong gmail 实在不敢用啊!我现在都每天得翻墙才能收个邮件……之前试用过 QQ 企业邮箱,可能这次还用……

#3 楼 @Peter 我在弄 sendcloud,好麻烦,那 200 个免费额度要弄这弄那才得到……

#6 楼 @blacktulip MANDRILL 的话,发国内邮箱会有问题吗?会被墙吗?

其实吧……最近和 sendcloud 撕逼未果,总是报 eoferror,最终一怒之下自己搭了 smtp 服务器……反正也就两行命令的事情……

#12 楼 @cassiuschen 这么简单吗?可是我听说很容易被当成垃圾邮件,或者变成垃圾邮件中转站啥的……

#12 楼 @cassiuschen 话说,seedcloud 干了什么惹怒你了?

15 楼 已删除

#13 楼 @chairy11 对,容易成为垃圾邮件,但只要经过不懈努力前期培养,也可以不被当成 spam……自己搭 smtp 其实只需要装一个 sendmail 就可以了,复杂的是如果你的服务器还要担负收邮件的工作,就需要配置很多东西,而且开放 smtp 服务也容易让服务器成为被攻击的对象,进而自己的机器成为肉鸡…sendcloud 倒是没惹怒我只是使用它的 smtp 服务我这里永远都是报 eoferror 还找不到原因……所以发邮件找他们但未收到任何回复……

其实用哪种邮箱代收不重要,重要的是你用 ActionMailer 的时候配置对就可以了,参考官方的http://guides.ruby-china.org/action_mailer_basics.html 就可以,8 楼的同学说的配置是对的。

#17 楼 @baypm2014 我的确是用 gmail 设置成功了。但我感觉 gmail 不翻墙是否没保证?考虑别的

#6 楼 @blacktulip 唉,刚想注册 mandrill, 结果提示说“Because of limitations in sending and receiving emails in China, Mandrill can't provide service for new accounts in China.”

需要 登录 后方可回复, 如果你还没有账号请 注册新账号