smtp设置user_name正在覆盖发件人电子邮件

时间:2013-11-16 16:48:25

标签: ruby-on-rails ruby email ruby-on-rails-3.2 rubygems

我正在编写一个ruby脚本,使用'mail'gem发送电子邮件。

和我本地计算机上的smtp设置:

mailer_options:
    address: smtp.gmail.com
    port: 465
    domain: gmail.com
    user_name: example@gmail.com
    password: example_password
    authentication: :login
    enable_starttls_auto: true
    ssl: true

我想发送这样的信息:-----

Mail.deliver do

  to  'receiver@gmail.com'
  from    'sender@gmail.com'
  subject 'Test Mail'

  text_part do
    body 'Hello World!!!!!'
  end

end

邮件发送成功但是当我打开电子邮件时,我看到发件人电子邮件ID为 example@gmail.com代替sender@gmail.com,为什么会这样,我无法理解。

感谢任何评论和回答。

4 个答案:

答案 0 :(得分:4)

这通常由您的SMTP服务器完成,并且无法控制。如果Google没有为您服务,您可以尝试使用其他SMTP提供商,例如Sendgrid

答案 1 :(得分:2)

上面的答案正确,这不是您的代码,而是执行此操作的Gmail SMTP服务器。我为SendGrid工作,如果你想将其改为使用SendGrid(或任何其他提供商),那么你可以很容易地做到这一点。我们的免费计划每天可发送400封电子邮件,适合当地发展。

您的代码将更改如下:

mailer_options:
  address: smtp.sendgrid.net
  port: 587
  domain: yourdomain.com
  username: your_username
  password: your_password
  authentication: plain
  enable_starttls_auto: true

您不需要在此阶段设置SSL。在这里,您可以使用原始的Mail.deliver方法。

您会发现现在可以从sender@yourdomain.com地址或您在from属性中指定的地址发送。

还有Ruby& the SendGrid documentation中的SendGrid详细信息。

答案 2 :(得分:1)

谷歌不允许发件人电子邮件屏蔽。这是由GMAIL的服务器完成的。不是你的rails代码!!它总是使用您使用的gmail帐户的电子邮件地址作为“from_email”。 您最好的选择可能是“Mandrill”(每月12000封电子邮件)。它们允许以您希望的方式进行电子邮件路由。

答案 3 :(得分:0)

请在下方设置发件人默认名称,而不是“sender@gmail.com”:

class UserMailer < ActionMailer::Base
  default from: 'sender@gmail.com'

  def welcome_email(user)
    @user = user
    @url  = 'http://example.com/login'
    mail(to: @user.email, subject: 'Welcome to My Awesome Site')
  end
end