R发送邮件(mailR)异常处理
报错1:java.lang.NoClassDefFoundError: javax/activation/DataHandler at org.apache.commons.mail.Email.createMimeMessage(Email.java:1832) at org.apache.commons.mail.Email.buildMimeMessage(Email.java:1268) at org.apache.commons.mail.Email.send(Email.java:1436) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:564) at RJavaTools.invokeMethod(RJavaTools.java:386)Caused by: java.lang.ClassNotFoundException at RJavaClassLoader.findClass(RJavaClassLoader.java:383) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:566) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:499) ... 8 moreNULLError: NoClassDefFoundError (Java): javax/activation/DataHandler原因分析:缺少activation.jar、mail.jar这两个jar包
解决办法:
1.下载这两个jar包
2.解压上述下载的压缩包,将两个jar包放入对应的目录下。
在R或者rstudio执行下述命令,可以确认对应目录,例如我的是 C:\Program Files\R\R-4.0.2\library\mailR\java:
system.file("java", package = "mailR")
3.重启Rgui或者Rstudio,再执行发送邮件的命令即可。
报错2:
org.apache.commons.mail.EmailException: Sending the email to the following server failed : smtp.qq.com:465
at org.apache.commons.mail.Email.sendMimeMessage(Email.java:1410)
at org.apache.commons.mail.Email.send(Email.java:1437)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:564)
at RJavaTools.invokeMethod(RJavaTools.java:386)
Caused by: javax.mail.AuthenticationFailedException: 535 Login Fail. Please enter your authorization code to login. More information in http://service.mail.qq.com/cgi-b ... &&id=28&&no=1001256
at com.sun.mail.smtp.SMTPTransport$Authenticator.authenticate(SMTPTransport.java:892)
at com.sun.mail.smtp.SMTPTransport.authenticate(SMTPTransport.java:814)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:728)
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
NULL
Error: EmailException (Java): Sending the email to the following server failed : smtp.qq.com:465
原因分析:邮箱未开启smtp服务或者未输入授权码
解决办法:
1.登录网页版qq邮箱,依次打开设置->账户
2.下滑找到SMTP服务,开启
3.通过验证后可以获取到授权码
4.将授权码填入passwd参数,如下:body = "this is a test"# 正文
recipients <- c("1111111111@qq.com", "2222222222@qq.com") # 收件人
sender = "110396XXXX@qq.com"# 发件人
title = "this is title" # 主题
send.mail(from = sender,
to = recipients,
subject = title,
body = "测试",
encoding = "utf-8",#这里的utf需要小写,因为Supported encodings include iso-8859-1, utf-8, us-ascii, and koi8-r only.
smtp = list( host.name = "smtp.qq.com",
port = 465,
user.name = sender,
passwd = "sokpoXXXXbeiggj", #将上述获取的授权码填入此处,注意区分大小写
ssl = TRUE ),
authenticate = TRUE,
send = TRUE)
页:
[1]