我正在尝试从生产服务器上的控制台发送一些邮件,但它们没有发送出去。我不明白为什么。我只有您使用 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.example", "password")
当我这样做时,我得到了 Tmail::StringPort 对象,但邮件似乎没有发送出去(我正在尝试向自己发送电子邮件来测试这一点)。
我在 Ubuntu 服务器上,以防有帮助。谢谢 - 最大
更快版本:
ActionMailer::Base.mail(
from: "[email protected]",
to: "[email protected]",
subject: "Test",
body: "Test"
).deliver_now
今天早上我在 Rails 3 应用程序上遇到了类似的问题,我打电话给:
UserMailer.activation_instructions(@user)
这给了我数据,但没有发送电子邮件。为了发送,我打电话:
UserMailer.activation_instructions(@user).deliver
这成功了。希望这也对你有用!
要首先从 Rails Console 发送电子邮件,我们必须在控制台中执行此设置以进行操作邮件程序设置。
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: '[email protected]',
password: 'yourpassword'
}
之后,如果我们执行电子邮件发送代码,它将发送电子邮件。
UserMailer.activation_instructions(@user).deliver_now
如果您想发送附件
mailer = ActionMailer::Base.new
mailer.attachments["file.jpg"] = File.read("/dir/file.jpg")
mailer.attachments["file.txt"] = "some text"
mailer.mail(from: "[email protected]",
to: "[email protected]",
subject: "Email with attachments",
body: "included the documents below\n\n")
mailer.message.deliver
mail
必须位于附件之后,因为它创建标题。
如果我明白你想做什么,我也不是100%。
如果您尝试向互联网发送电子邮件,则必须配置您的 sendmail,以便将这些电子邮件转发到正确的电子邮件服务器。根据您使用的 Ubuntu 版本,您只需重新配置软件包即可实现此目的。
您可能还会想是否要使用 procmail 而不是 sendmail。
您可以使用
重新配置电子邮件配置dpkg-reconfigure sendmail
如果您使用该软件包,请使用 procmail 来代替。配置对话框为您提供了一些选项,您可以将其配置为将所有邮件转发到适当的电子邮件服务器。但是,您需要考虑是否需要身份验证或者该服务器是否只接受来自您的服务器的电子邮件。