ShinyProxy部署后mailR发邮件报smtp.gmail.com:587连接失败问题
问题根因
从报错日志可定位核心问题为Docker容器内的Java 8运行环境TLS握手失败,触发原因是Java安全配置禁用了Gmail SMTP要求的TLS协议版本/加密套件,或容器内CA证书不全、网络出站受限,和本地PC的Java默认配置存在差异。
解决方案
调整Docker容器内Java 8的安全配置
找到你的Shiny应用对应的Dockerfile,在安装Java 8的步骤后添加如下命令,解除对高版本TLS协议的禁用:# 修改Java安全配置,允许TLS 1.2及以上协议 RUN sed -i 's/jdk.tls.disabledAlgorithms=SSLv3, TLSv1, TLSv1.1, RC4, DES, MD5withRSA, DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL/jdk.tls.disabledAlgorithms=SSLv3, RC4, DES, MD5withRSA, DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL/g' /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/security/java.security注意如果你的Java安装路径不同,需要对应替换上述路径。
补全容器内CA证书
很多精简版Docker镜像缺少根证书,无法验证Gmail的SSL证书,在Dockerfile中添加如下命令安装证书:RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates && update-ca-certificates调整mailR发信参数,明确指定TLS版本
手动指定使用Gmail支持的TLS 1.2协议,修改你的发信代码如下:send.mail(from="XMail@gmail.com", to="YMail@outlook.de", subject="Test Email", body="PFA the desired document", html=T, smtp=list(host.name = "smtp.gmail.com", port = 587, user.name = "XMail@gmail.com", passwd = "XPassword", tls = T, ssl.protocols = "TLSv1.2"), authenticate=T, attach.files=Pn)额外注意:Gmail现已不再支持普通密码登录第三方应用,需先为Google账号开启两步验证,再生成专属应用密码作为
passwd参数的取值。排查网络连通性
进入运行中的Shiny容器执行如下命令,确认容器可以正常访问Gmail SMTP端口:nc -zv smtp.gmail.com 587如果连通失败,需要检查Ubuntu服务器的ufw防火墙、云服务商安全组规则,确认开放了587/465端口的出站访问,同时确认Docker网络没有做出站限制。
内容的提问来源于stack exchange,提问作者LePyka
相关产品推荐
相关产品推荐

