You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 20:11:26