我有 Actionmailer 使用 gmail 发送电子邮件,设置如下:
ActionMailer::Base.smtp_settings = {
:address => "smtp.gmail.com",
:port => 587,
:domain => "gmail.com",
:user_name => "[email protected]",
:password => "password",
:authentication => "plain",
:enable_starttls_auto => true
}
但是,我无法使用 Office 365 邮件,我有以下设置:
ActionMailer::Base.smtp_settings = {
:address => "smtp.office365.com",
:port => 587,
:domain => "my_domain.com",
:user_name => "username@my_domain.onmicrosoft.com",
:password => "password",
:authentication => :login,
:enable_starttls_auto => true
}
如果我尝试向该客户发送电子邮件,我会得到:
Net::SMTPFatalError
550 5.7.1 Client does not have permissions to send as this sender
结果 Microsoft 要求
smtp_settings
中的 :from
和 emailer.rb
字段使用相同的电子邮件。
我在 Gmail 和 Office365 上也遇到过同样的问题,在挠头几个小时后我找到了解决方案。
如果您使用 Office365 帐户发送电子邮件,则仅当
user_name
和 sender_address
且值相同时才有效。即
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
address: 'smtp.office365.com',
port: 587,
domain: 'my_domain.pk',
user_name: 'noreply@my_domain.pk',
password: ENV['PASSWORD'],
authentication: 'login',
enable_starttls_auto: true
}
config.middleware.use ExceptionNotification::Rack,
email: {
deliver_with: :deliver,
email_prefix: '[Email Prefix]',
sender_address: %{<noreply@my_domain.pk>},
exception_recipients: %w{[email protected]}
}
config.action_mailer.perform_deliveries = true
关键点:因此保持以下值相同对我有用
user_name: 'noreply@my_domain.pk'
sender_address: %{<noreply@my_domain.pk>}
在此处了解有关通过 Office 365 使用 SMTP 发送的更多信息: https://technet.microsoft.com/en-us/library/dn554323.aspx
使用这样的认证方法你不需要设置:domain。
在
devise.rb
中我设置了"no-reply@******.com"
,并且我在smtp设置中的production.rb
中提到了"noreply@*****.com"
。
将
devise.rb
中的电子邮件 ID 替换为 "no-reply@*******.com"
为 "noreply@******.com"
后,现在工作正常。
配置 Mailer 以使用 Office 365 (
config/environments/development.rb
:
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
address: 'smtp.office365.com',
port: 587,
domain: ENV.fetch("APP_MAILER_DOMAIN"), # Your domain
user_name: ENV.fetch("APP_MAILER_USERNAME"), # Your Office 365 email address
password: ENV.fetch("APP_MAILER_PASSWORD"), # Your Office 365 password
authentication: 'login',
enable_starttls_auto: true
}
现在您需要在 Exchange Online 中禁用经过身份验证的客户端 SMTP 提交 (SMTP AUTH):
现在邮件程序应该可以为您工作了。注意:由于您已禁用默认安全设置,因此您需要确保制定自定义安全策略来保护您的组织。
有关安全设置的其他阅读资源: