使用Logic App通过Gmail发送ADLS文件附件失败,遇SMTP连接错误
我看到不少开发者都遇到过类似的问题——明明附件大小符合限制,却还是触发了Unable to read data from the transport connection: An established connection was aborted by the software in your host machine错误。结合社区的反馈和实际排查经验,给你几个可行的解决方向:
1. 验证Gmail账号的认证配置
如果你开启了Gmail的两步验证(2FA),绝对不能用普通密码配置Logic App的Gmail连接器,必须使用Google生成的应用专用密码(App Password)。很多用户因为忽略这一点,导致底层SMTP连接认证失败,最终触发连接中止错误。
另外,确认连接器使用的SMTP端口和加密方式:Gmail默认支持587端口(TLS加密)和465端口(SSL加密),可以尝试在连接器配置里切换端口试试,有时候特定环境下某一个端口会被网络策略限制。
2. 调整Logic App的超时与重试策略
文件从ADLS读取后传输到Gmail的过程中,可能因为网络波动或文件读取延迟导致连接超时。你可以:
- 打开发送邮件的操作设置,将超时时间从默认的60秒延长到300秒左右;
- 启用重试策略,选择“指数间隔”或“固定间隔”,增加重试次数(比如3-5次),让Logic App在连接中断后自动重试。
同时,确保ADLS文件读取操作完全完成后再触发发送邮件步骤——可以在读取操作后添加一个“延迟”动作(比如10秒),或者设置依赖条件确认文件内容已成功获取。
3. 排查网络层面的限制
错误提示里的“主机机器软件中止连接”,大概率是网络层面的问题:
- 如果你的Logic App部署在Azure虚拟网络(VNet)中,检查网络安全组(NSG)的出站规则,确保允许访问
smtp.gmail.com的587/465端口; - 确认Azure数据中心到Gmail SMTP服务器的网络连通性,可以通过Azure Monitor查看Logic App的出站流量日志,排查是否有数据包丢失;
- 如果你所在的环境有企业防火墙或代理,需要确认这些设备没有拦截到Gmail SMTP服务器的连接。
4. 排查文件编码与传输体积问题
虽然你设置了20MB的大小限制,但要注意:Logic App中获取的文件大小是原始字节数,而附件在通过SMTP发送时会被Base64编码,编码后的体积会比原始文件大30%左右。比如18MB的原始文件,编码后会变成23.4MB,虽然还在Gmail的30MB限制内,但某些情况下可能触发中间节点的限制。你可以尝试将限制阈值调低到15MB,测试是否能正常发送。
另外,也可以尝试通过Gmail的REST API直接发送附件(替代内置的Gmail连接器),有些用户反馈这种方式比SMTP更稳定,避免了底层SMTP连接的问题。
很多社区用户通过上述方法解决了类似问题,比如有用户发现是VNet的NSG规则阻止了SMTP端口,打开后立即恢复正常;还有用户切换到App Password后解决了认证导致的连接中断。
内容的提问来源于stack exchange,提问作者DraganB

