51data 发表于 2020-9-27 13:48:11

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]
查看完整版本: R发送邮件(mailR)异常处理