使用R语言发送邮件失败求助:SMTP配置等问题排查
R发送邮件失败求助
我是R编程新手,正在学习用R发送邮件。查了大量在线资源和YouTube教程都没成功,怀疑问题出在VPN或公司网络环境上。
试过sendmailR、mailR、blastula和emayili这些包,全都失败了,希望有人能针对我的情况推荐解决办法。
我的疑问:
- SMTP配置是否正确?
- 使用的端口号是否正确?
- 代码是否存在错误?
尝试的代码(最接近成功的一次)
require(emayili) require(dplyr) sender <- "abc@company123.com.my" recipient <- "abc@company123.com.my" email <- envelope() %>% from(sender) %>% to(recipient) %>% subject("Internship_Learning") %>% text("Pass?") smtp <- server(host = "123.45.678.901", port = 465, username = "abc@company123.com.my", password = "***", secure = "ssl" ) smtp(email, verbose = TRUE)
报错信息
> rlang::last_trace() <error/purrr_error_rate_excess> Error in `rate_sleep()`: ! Request failed after 5 attempts. --- Backtrace: ▆ 1. └─emayili (local) smtp(email, verbose = TRUE) 2. └─purrr (local) send_mail(...) at emayili/R/server.R:190:4 3. └─purrr::rate_sleep(rate, quiet = quiet) Run rlang::last_trace(drop = FALSE) to see 3 hidden frames. > rlang::last_trace(drop = FALSE) <error/purrr_error_rate_excess> Error in `rate_sleep()`: ! Request failed after 5 attempts. --- Backtrace: ▆ 1. └─emayili (local) smtp(email, verbose = TRUE) 2. └─purrr (local) send_mail(...) at emayili/R/server.R:190:4 3. └─purrr::rate_sleep(rate, quiet = quiet) 4. └─purrr:::stop_rate_excess(rate) 5. └─cli::cli_abort(...) 6. └─rlang::abort(...)
参考截图说明
- 截图1:展示邮件客户端SMTP配置界面,包含服务器地址、端口、加密方式等核心配置项
- 截图2:展示邮件客户端的认证设置界面,包含登录账号、密码/授权码输入区域
排查方向及解决建议
网络环境验证
- 关闭VPN后测试,部分公司网络会封禁SMTP端口,可切换至手机热点运行代码,排除企业网络限制。
- 用telnet命令测试SMTP服务器连通性:
若无法连通,说明网络层面被拦截,需联系IT部门开放对应端口权限。telnet 123.45.678.901 465
SMTP配置核对
- 对照截图中的邮件客户端配置,确保
host、port、secure参数完全匹配:- 若客户端使用
STARTTLS加密,需将secure设为"starttls",对应端口通常为587。 - 部分企业邮箱要求使用授权码而非登录密码,确认密码字段是否为正确的授权码。
- 若客户端使用
- 对照截图中的邮件客户端配置,确保
代码调试优化
- 开启debug模式查看连接细节:
可获取连接过程中的具体错误提示,定位问题根源。smtp(email, verbose = TRUE, debug = TRUE) - 简化代码逻辑,去掉dplyr管道用基础写法测试:
email <- envelope() email <- from(email, sender) email <- to(email, recipient) email <- subject(email, "Internship_Learning") email <- text(email, "Pass?")
- 开启debug模式查看连接细节:
替代方案
- 若企业网络限制严格,可尝试调用公司内部邮件服务器的API接口(如有提供);或使用
curl包对接第三方邮件服务API(如SendGrid,需提前申请API密钥)。
- 若企业网络限制严格,可尝试调用公司内部邮件服务器的API接口(如有提供);或使用
内容的提问来源于stack exchange,提问作者Gambit
相关产品推荐
相关产品推荐

