Rails actionmailer、gmail 可以工作,但 Office 365 不行。

问题描述 投票:0回答:5

我有 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
ruby-on-rails actionmailer office365
5个回答
7
投票

结果 Microsoft 要求

smtp_settings
中的
:from
emailer.rb
字段使用相同的电子邮件。


3
投票

我在 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>}

0
投票

在此处了解有关通过 Office 365 使用 SMTP 发送的更多信息: https://technet.microsoft.com/en-us/library/dn554323.aspx

使用这样的认证方法你不需要设置:domain。


0
投票

devise.rb
中我设置了
"no-reply@******.com"
,并且我在smtp设置中的
production.rb
中提到了
"noreply@*****.com"

devise.rb
中的电子邮件 ID 替换为
"no-reply@*******.com"
"noreply@******.com"
后,现在工作正常。


0
投票

配置 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):

  1. 至少以安全管理员身份登录到 Microsoft Entra 管理 中心。
  2. 浏览到身份 > 概述 > 属性
  3. 选择管理安全默认值。
  4. 将安全性默认设置为禁用
  5. 选择保存。

现在邮件程序应该可以为您工作了。注意:由于您已禁用默认安全设置,因此您需要确保制定自定义安全策略来保护您的组织。

有关安全设置的其他阅读资源:

  1. https://learn.microsoft.com/en-us/exchange/clients-and-mobile-in-exchange-online/authenticated-client-smtp-submission
  2. https://learn.microsoft.com/en-us/entra/fundamentals/security-defaults
© www.soinside.com 2019 - 2024. All rights reserved.