从rails console发送电子邮件

时间:2010-07-16 16:58:38

标签: ruby-on-rails sendmail

我正在尝试从我的生产服务器上的控制台发送一些邮件,但他们没有出去。我无法理解为什么。我只使用sendmail标准的电子邮件设置。当我调用Mailer.deliver_方法时,我得到了回复:

#<TMail::Mail port=#<TMail::StringPort:id=0x3fe1c205dbcc> bodyport=#<TMail::StringPort:id=0x3fe1c2059e00>>

编辑:添加了更多信息:

因此,例如,当新用户注册时,我在我的控制器中有这一行,向他们发送“欢迎”电子邮件:

 Mailer.deliver_signup(@user, request.host_with_port, params[:user][:password])

这很好用。我认为我应该可以从控制台做同样的事情,例如

user = User.find(1)
Mailer.deliver_signup(user, "mydomainname.com", "password")

当我这样做时,我收回了Tmail :: StringPort对象,但是邮件似乎没有被发送出去(我正试图向我自己发送电子邮件进行测试)。

我在ubuntu服务器上以防万一。谢谢 - 最大

5 个答案:

答案 0 :(得分:86)

更快的版本:

ActionMailer::Base.mail(
  from: "test@example.co", 
  to: "valid.recipient@domain.com", 
  subject: "Test", 
  body: "Test"
).deliver_now

答案 1 :(得分:47)

我今天早上在一个Rails 3应用程序上遇到了类似的问题,我打电话给:

UserMailer.activation_instructions(@user)

这给了我数据,但没有发送电子邮件。要发送,我打电话给:

UserMailer.activation_instructions(@user).deliver

这就是诀窍。希望这对你也有用!

答案 2 :(得分:26)

首先,我们必须在控制台中执行此设置以执行动作邮件设置。

ActionMailer::Base.delivery_method = :smtp 
ActionMailer::Base.smtp_settings = {
  address: 'smtp.gmail.com', 
  port: 587, 
  domain: 'gmail.com',
  authentication: 'plain', 
  enable_starttls_auto: true, 
  user_name: 'your@gmail.com',
  password: 'yourpassword'
}

之后如果我们执行电子邮件发送代码,它将发送电子邮件。

UserMailer.activation_instructions(@user).deliver_now

答案 3 :(得分:0)

如果我明白你要做什么,我不是100%。

如果您尝试将电子邮件发送到Internet,则必须配置sendmail,以便将这些电子邮件转发到正确的电子邮件服务器。根据您使用的Ubuntu版本,您只需重新配置程序包即可。

您也可以考虑使用procmail而不是sendmail。

您可以使用

重新配置电子邮件配置
dpkg-reconfigure sendmail
如果您使用该软件包,请使用procmail。配置对话框为您提供了一些选项,您可以将其配置为将所有邮件转发到相应的电子邮件服务器。但是,您需要考虑是否需要身份验证,或者该服务器是否只接受来自服务器的电子邮件。

答案 4 :(得分:0)

如果你想发送附件

mailer = ActionMailer::Base.new
mailer.attachments["file.jpg"] = File.read("/dir/file.jpg")
mailer.attachments["file.txt"] = "some text"
mailer.mail(from: "me@example.com",
            to: "you@example.com",
            subject: "Email with attachments",
            body: "included the documents below\n\n")
mailer.message.deliver

mail 必须在附件之后,因为它会创建标题。