错误:EmailException (Java):将电子邮件发送到以下服务器失败:smtp.gmail.com:465

问题描述

在 R-Studio 中运行以下查询时遇到主题错误

查询:-

library(mailR)
sender<-"abc@gmail.com"
To<-c("xyz.@gmail.com")
sm<-list(host.name = "smtp.gmail.com",port = 465,user.name="abc@gmail.com",passwd="Password@123",ssl=TRUE)
  send.mail(from=sender,to=To,subject = paste0("Test_Email"),body = paste0("Test_Mail_Details"),html = TRUE,inline = FALSE,smtp = sm,authenticate = TRUE,send = TRUE)

错误按摩细节:

    org.apache.commons.mail.EmailException: Sending the email to the following server Failed : 
    smtp.gmail.com:465
    at org.apache.commons.mail.Email.sendMimeMessage(Email.java:1410)
    at org.apache.commons.mail.Email.send(Email.java:1437)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at RJavaTools.invokeMethod(RJavaTools.java:386)
    Caused by: javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmail.com,port: 465;
  nested exception is:
    javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)
    at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:2055)
    at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:697)
    at javax.mail.Service.connect(Service.java:386)
    at javax.mail.Service.connect(Service.java:245)
    at javax.mail.Service.connect(Service.java:194)
    at javax.mail.Transport.send0(Transport.java:253)
    at javax.mail.Transport.send(Transport.java:124)
    at org.apache.commons.mail.Email.sendMimeMessage(Email.java:1400)
    ... 6 more
Caused by: javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)
    at sun.security.ssl.HandshakeContext.<init>(HandshakeContext.java:171)
    at sun.security.ssl.ClientHandshakeContext.<init>(ClientHandshakeContext.java:98)
    at sun.security.ssl.TransportContext.kickstart(TransportContext.java:220)
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:428)
    at com.sun.mail.util.socketFetcher.configureSSLSocket(SocketFetcher.java:543)
    at com.sun.mail.util.socketFetcher.createSocket(SocketFetcher.java:348)
    at com.sun.mail.util.socketFetcher.getSocket(SocketFetcher.java:215)
    at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:2019)
    ... 13 more
Error: EmailException (Java): Sending the email to the following server Failed: smtp.gmail.com:465

解决方法

尝试使用下一个:

rJava::.jinit()
rJava::.jcall("java/lang/System","S","setProperty","mail.smtp.ssl.protocols","TLSv1.2")

mailR::send.mail(...)

https://github.com/rpremraj/mailR/issues/100#issuecomment-832680313