使用WSO2 Email连接器通过非安全SMTP发件遇中继访问拒绝问题
WSO2 Email连接器SMTP中继访问拒绝问题
场景
我通过WSO2的Email连接器,使用非安全SMTP服务器发送邮件。
连接配置
<?xml version="1.0" encoding="UTF-8"?> <localEntry key="unSecureConn" xmlns="http://ws.apache.org/ns/synapse"> <email.init> <requireAuthentication>true</requireAuthentication> <connectionType>SMTP</connectionType> <password>XXXXX</password> <host>smtp.XXXX.com</host> <port>25</port> <name>unSecureConn</name> <username>XXXXXX</username> </email.init> </localEntry>
API配置
<?xml version="1.0" encoding="UTF-8"?> <api context="/email" name="EmailMicroService" port="8290" xmlns="http://ws.apache.org/ns/synapse"> <resource methods="POST" uri-template="/send"> <inSequence> <log level="full"/> <email.send configKey="unSecureConn"> <from>{json-eval($.from)}</from> <to>{json-eval($.to)}</to> <subject>{json-eval($.subject)}</subject> <content>{json-eval($.content)}</content> <contentType>{json-eval($.contentType)}</contentType> <attachments>{json-eval($.attachments)}</attachments> </email.send> <respond/> </inSequence> <outSequence/> <faultSequence/> </resource> </api>
问题
遇到Relay access denied(中继访问拒绝)问题。登录SMTP服务器的用户门户能正常发送邮件,但通过WSO2连接器发送时出现以下错误:
[2022-11-16 13:55:17,526] ERROR {EmailSend} - {api:EmailMicroService} Error occurred while sending the email with subject hi to ayub.jamal@XXXX.com. org.wso2.carbon.connector.exception.EmailConnectionException: Error occurred while sending the email with subject hi to ayub.jamal@XXXX.com. at org.wso2.carbon.connector.operations.EmailSend.sendMessage(EmailSend.java:116) at org.wso2.carbon.connector.operations.EmailSend.connect(EmailSend.java:59) at org.wso2.carbon.connector.core.AbstractConnector.mediate(AbstractConnector.java:32) at org.apache.synapse.mediators.ext.ClassMediator.updateInstancePropertiesAndMediate(ClassMediator.java:178) at org.apache.synapse.mediators.ext.ClassMediator.mediate(ClassMediator.java:97) at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:110) at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:72) at org.apache.synapse.mediators.template.TemplateMediator.mediate(TemplateMediator.java:136) at org.apache.synapse.mediators.template.InvokeMediator.mediate(InvokeMediator.java:170) at org.apache.synapse.mediators.template.InvokeMediator.mediate(InvokeMediator.java:93) at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:110) at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:72) at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:158) at org.apache.synapse.api.Resource.process(Resource.java:342) at org.apache.synapse.api.API.process(API.java:477) at org.apache.synapse.api.AbstractApiHandler.apiProcess(AbstractApiHandler.java:93) at org.apache.synapse.api.AbstractApiHandler.dispatchToAPI(AbstractApiHandler.java:71) at org.apache.synapse.api.rest.RestRequestHandler.dispatchToAPI(RestRequestHandler.java:90) at org.apache.synapse.api.rest.RestRequestHandler.process(RestRequestHandler.java:76) at org.apache.synapse.rest.RESTRequestHandler.process(RESTRequestHandler.java:54) at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2SynapseEnvironment.java:344) at org.apache.synapse.core.axis2.SynapseMessageReceiver.receive(SynapseMessageReceiver.java:101) at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180) at org.apache.synapse.transport.passthru.ServerWorker.processNonEntityEnclosingRESTHandler(ServerWorker.java:376) at org.apache.synapse.transport.passthru.ServerWorker.processEntityEnclosingRequest(ServerWorker.java:435) at org.apache.synapse.transport.passthru.ServerWorker.run(ServerWorker.java:183) at org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at java.base/java.lang.Thread.run(Thread.java:834) Caused by: javax.mail.SendFailedException: Invalid Addresses; nested exception is: com.sun.mail.smtp.SMTPAddressFailedException: 554 5.7.1 <ayub.jamal@XXXX.com>: Relay access denied at com.sun.mail.smtp.SMTPTransport.rcptTo(SMTPTransport.java:2079) at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1301) at javax.mail.Transport.send0(Transport.java:255) at javax.mail.Transport.send(Transport.java:124) at org.wso2.carbon.connector.operations.EmailSend.sendMessage(EmailSend.java:135) at org.wso2.carbon.connector.operations.EmailSend.sendMessage(EmailSend.java:110) ... 29 more Caused by: com.sun.mail.smtp.SMTPAddressFailedException: 554 5.7.1 <ayub.jamal@XXXX.com>: Relay access denied at com.sun.mail.smtp.SMTPTransport.rcptTo(SMTPTransport.java:1979) ... 34 more
解决建议
- 统一发件人地址:多数SMTP服务器要求发件人
from必须和认证的username一致。你现在用动态传入的from,可能和配置里的邮箱账号不匹配。先把from固定为认证邮箱试试:<from>XXXXXX@XXXX.com</from> - 检查服务器中继权限:用户门户能发不代表服务器允许WSO2所在IP中继。联系邮件管理员,确认WSO2服务器的IP是否在允许中继的列表里,或者是否需要给连接器这类客户端开放权限。
- 强制SMTP认证属性:在连接配置里添加认证相关属性,确保认证流程正确执行:
<email.init> <requireAuthentication>true</requireAuthentication> <connectionType>SMTP</connectionType> <password>XXXXX</password> <host>smtp.XXXX.com</host> <port>25</port> <name>unSecureConn</name> <username>XXXXXX</username> <properties> <property name="mail.smtp.auth" value="true"/> </properties> </email.init> - 更换SMTP端口:25端口常被限制仅本地中继,试试改用587端口,很多服务器对这个端口的中继限制更宽松,修改连接配置里的
port为587即可。
内容的提问来源于stack exchange,提问作者Ayub Jamal
相关产品推荐
相关产品推荐

