客户端无权作为此发件人发送(office 365,grails)
Posted
技术标签:
【中文标题】客户端无权作为此发件人发送(office 365,grails)【英文标题】:Client does not have permissions to send as this sender (office 365, grails) 【发布时间】:2015-06-23 20:57:06 【问题描述】:我在尝试为 grails spring 安全插件配置 grails 邮件插件 (https://grails.org/plugin/mail) 时不断收到以下错误消息。
这是我目前的配置,
圣杯 邮件 主机=“smtp.office365.com” 端口 = 587 用户名 = "info@email.com" 密码=“密码” 道具 = ["mail.smtp.starttls.enable":"true", "mail.smtp.port":"587"] grails.mail.default.from = "info@email.com"这是我的堆栈跟踪。
.......|错误 2015-04-17 11:59:39,184 [http-bio-8080-exec-8] 错误错误。GrailsExceptionResolver - 处理请求时发生 MailSendException:[POST] /retouch/register/forgotPassword - 参数: 用户名:客户 失败消息:com.sun.mail.smtp.SMTPSendFailedException:550 5.7.60 SMTP;客户端无权作为此发件人发送 .堆栈跟踪如下: 消息:失败消息:com.sun.mail.smtp.SMTPSendFailedException:550 5.7.60 SMTP;客户端无权作为此发件人发送 线 |方法 ->> 131 | grails.plugin.mail.MailMessageBuilder 中的 sendMessage - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 55 | grails.plugin.mail.MailService 中的 sendMail | 59 |发送邮件 。 . .在 '' | 156 | grails.plugin.springsecurity.ui.RegisterController 中忘记密码 | 198 |过滤器。 . .在 grails.plugin.cache.web.filter.PageFragmentCachingFilter | 63 | grails.plugin.cache.web.filter.AbstractFilter 中的 doFilter | 53 |过滤器。 . .在 grails.plugin.springsecurity.web.filter.GrailsAnonymousAuthenticationFilter | 49 | grails.plugin.springsecurity.web.authentication.RequestHolderAuthenticationFilter 中的 doFilter | 82 |过滤器。 . .在 grails.plugin.springsecurity.web.authentication.logout.MutableLogoutFilter |第1145章java.util.concurrent.ThreadPoolExecutor 中的 runWorker | 615 |跑步 。 . . . .在 java.util.concurrent.ThreadPoolExecutor$Worker ^ 745 |在 java.lang.Thread 中运行注意:问题仅在 Grails spring 安全插件中发现。
【问题讨论】:
【参考方案1】:我让 Grails 使用测试 GMail 帐户非常轻松地发送电子邮件,但是当我尝试从 Outlook.office365.com 帐户发送时,代码因错误而崩溃:
失败的消息:com.sun.mail.smtp.SMTPSendFailedException: 550 5.7.60 SMTP;客户端无权作为此发件人发送
原来我只是错过了这一行:
grails.mail.default.from = "sample@somewhere.com"
注意grails.mail.default.from
中指定的电子邮件地址必须与grails.mail.username
中的电子邮件地址匹配。
这是对我有用的配置。基本示例是 Grails in Action (2nd Ed) 一书中的 Hubbub 示例:
grails.mail.default.from = "sample@somewhere.com"
grails
mail
host = "outlook.office365.com"
port = 587
username = "sample@somewhere.com"
password = "secret"
props = [ "mail.smtp.starttls.enable" : "true",
"mail.smtp.port" : "587",
"mail.smtp.debug" : "true" ]
这里是对应的邮件发送函数:
def email()
println( "Sending email.." );
sendMail
to "test@gmail.com"
subject "[mail-test]"
body ("This is a test email, time: " + new Date() )
println( " success!!!" );
flash.message = "Successfully sent email"
redirect( uri: "/" );
【讨论】:
【参考方案2】:我遇到了完全相同的问题。问题似乎是由于 Spring Security 试图将电子邮件中的“发件人”属性设置为 no-reply@localhost。 尝试将这些行添加到配置文件中
grails.plugin.springsecurity.ui.register.emailFrom = 'info@email.com'
grails.plugin.springsecurity.ui.forgotPassword.emailFrom = 'info@email.com'
注意:info@email.com 是您的 office365 电子邮件
【讨论】:
您还应该添加 grails.plugin.springsecurity.ui.forgotPassword.emailFrom = 'info@email.com' 行 我不需要上述 2 行重新“springsecurity”。我只是缺少访问 office365.com 的“grails.mail.default.from”部分。 (请注意,使用 GMail 发件人帐户不需要这样做)【参考方案3】:用户名 = "info@emal.com"
grails.mail.default.from = "info@email.com"
用户名 email 必须等于 from email。
【讨论】:
对不起,事实并非如此。我知道两封电子邮件应该相同。这只是更改原始电子邮件时的一个错字。以上是关于客户端无权作为此发件人发送(office 365,grails)的主要内容,如果未能解决你的问题,请参考以下文章
易宝典文章——玩转Office 365中的Exchange Online服务 之二十八 怎样过滤病毒木马邮件