从轨道控制台发送电子邮件

我试着从我的生产服务器上的控制台发送一些邮件,但是没有发出去。我不知道为什么。我只有你的标准电子邮件设置与 sendmail。当我调用 Mailer.give _ method 时,我会得到以下结果:

#<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 服务器,如果有用的话,谢谢

50344 次浏览

我不是100% 明白你想做什么。

如果尝试向 Internet 发送电子邮件,则必须将 sendmail 配置为将这些电子邮件转发到适当的电子邮件服务器。根据你使用的 Ubuntu 版本,你可以重新配置软件包来做到这一点。

您还可以考虑是否要使用 procmail 而不是 sendmail。

可以重新配置电子邮件配置

dpkg-reconfigure sendmail

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

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

UserMailer.activation_instructions(@user)

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

UserMailer.activation_instructions(@user).deliver

这招管用,希望对你也管用!

对于从 Rails 控制台发送电子邮件,首先我们必须在控制台中执行这个操作邮件设置。

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

更快的版本:

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

如果你想发送附件

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必须位于附件之后,因为它创建了标题。