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

部署在AWS上的RShiny App发送邮件报错求助

解决AWS部署RShiny App后sendmailR无法连接SMTP端口25的问题

你遇到的问题是本地运行正常,但AWS服务器上用sendmailR连接SMTP端口25时失败,即便安全组已开放所有端口,核心原因大概率是以下几点:

1. AWS EC2默认限制端口25出站流量

AWS为防控垃圾邮件,默认会限制所有EC2实例的端口25出站流量,这个限制不受安全组配置影响。解决方式有两种:

  • 向AWS支持提交端口25出站限制的解除申请
  • 改用SMTP加密端口(如587或465),这类端口AWS不会默认限制

2. SMTP服务器未配置认证或加密

你的代码未添加SMTP认证信息,多数企业SMTP服务器不允许非本地环境下的匿名发送,且端口25通常不加密,服务器可能拒绝此类请求。修改代码示例如下(以端口587为例,添加认证与加密):

library(sendmailR)

host = "HIDDENSERVERNAME"
port = 587
from = 'noreply@companydomain.com'
to = 'yyy@companydomain.com'
subject = 'Test Email'
body = 'This is a test email'
sendmail(
  from, to, subject,
  msg = body,
  control = list(
    verboseShow = TRUE,
    smtpServer = host,
    smtpPort = port,
    smtpUsername = "你的SMTP用户名",
    smtpPassword = "你的SMTP密码",
    ssl = TRUE # 启用SSL加密
  )
)

3. 验证SMTP服务器的可达性

在AWS服务器上执行以下命令,测试能否连通目标SMTP服务器:

telnet HIDDENSERVERNAME 25

如果无法连通,说明目标SMTP服务器可能屏蔽了AWS的IP段,或存在网络路由问题,需联系邮件服务器管理员排查。

备选方案:改用mailR库

sendmailR对现代SMTP配置支持有限,推荐改用mailR库,它对加密连接和认证的支持更完善:

library(mailR)

send.mail(
  from = "noreply@companydomain.com",
  to = "yyy@companydomain.com",
  subject = "Test Email",
  body = "This is a test email",
  smtp = list(
    host.name = "HIDDENSERVERNAME",
    port = 587,
    user.name = "你的SMTP用户名",
    passwd = "你的SMTP密码",
    ssl = TRUE
  ),
  authenticate = TRUE,
  send = TRUE
)

内容的提问来源于stack exchange,提问作者Deepansh Arora

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 13:32:11