Java 如何将来自mailR的send.mail应用于Mac Mini?

Java 如何将来自mailR的send.mail应用于Mac Mini?,java,r,email,Java,R,Email,我使用mailR从R内部发送电子邮件。这在其他机器上也能正常工作。那是在我的MacMini之前。我可以毫无问题地运行install.packages(c(“rJava”、“mailR”)。然而,在发送时,我遇到了一些错误(基于之前的问题),这些错误似乎与Java有关 这是我的密码: library(rJava) library(mailR) smtp_list = list(host.name = "smtp.sendgrid.net", p

我使用
mailR
R
内部发送电子邮件。这在其他机器上也能正常工作。那是在我的MacMini之前。我可以毫无问题地运行
install.packages(c(“rJava”、“mailR”)
。然而,在发送时,我遇到了一些错误(基于之前的问题),这些错误似乎与Java有关

这是我的密码:

library(rJava)
library(mailR)

smtp_list = list(host.name = "smtp.sendgrid.net",
                port = 587,
                user.name = "XXX",
                passwd = "XXX",
                ssl = T)

body_html_test <- "<html><meta charset='UTF-8'><p>Hello<p></html>"

send.mail(from = "some@adress.com",
                 to = "my@adress.com",
                 subject = "This is a test",
                 body = body_html_test,
                 encoding="utf-8",
                 html = TRUE,
                 smtp = smtp_list,
                 authenticate = TRUE,
                 send = TRUE)

NULL
org.apache.commons.mail.EmailException: Sending the email to the following server failed : smtp.sendgrid.net: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.sendgrid.net, 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:101)
at sun.security.ssl.TransportContext.kickstart(TransportContext.java:238)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:394)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:373)
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.sendgrid.net:465
Java版本:

$ java -version
java version "1.8.0_291"
Java(TM) SE Runtime Environment (build 1.8.0_291-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.291-b10, mixed mode)
R版本:

$ R
R version 4.0.5 (2021-03-31) -- "Shake and Throw"
Copyright (C) 2021 The R Foundation for Statistical Computing
Platform: x86_64-apple-darwin17.0 (64-bit)
R Java配置:

$ R CMD javareconf
Java interpreter : /usr/bin/java
Java version     : 1.8.0_291
Java home path   : /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home
Java compiler    : /usr/bin/javac
Java headers gen.: /usr/bin/javah
Java archive tool: /usr/bin/jar

trying to compile and link a JNI program 
detected JNI cpp flags    : 
detected JNI linker flags : -L$(JAVA_HOME)/lib/server -ljvm
clang -mmacosx-version-min=10.13 -I"/Library/Frameworks/R.framework/Resources/include" -    DNDEBUG   -I/usr/local/include   -fPIC  -Wall -g -O2  -c conftest.c -o conftest.o
conftest.c:1:10: fatal error: 'jni.h' file not found
#include <jni.h>
         ^~~~~~~
1 error generated.
make: *** [conftest.o] Error 1
Unable to compile a JNI program


JAVA_HOME        : /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home
Java library path: 
JNI cpp flags    : 
JNI linker flags : 
Updating Java configuration in /Library/Frameworks/R.framework/Resources
Done.
$R CMD javareconf
Java解释器:/usr/bin/Java
Java版本:1.8.0291
Java主路径:/Library/Internet插件/JavaAppletPlugin.plugin/Contents/home
Java编译器:/usr/bin/javac
Java头文件gen.:/usr/bin/javah
Java归档工具:/usr/bin/jar
试图编译和链接JNI程序
检测到JNI cpp标志:
检测到JNI链接器标志:-L$(JAVA_HOME)/lib/server-ljvm
clang-mmacosx version min=10.13-I“/库/框架/R.framework/Resources/include“-DNDEBUG-I/usr/local/include-fPIC-Wall-g-O2-c conftest.c-o conftest.o
conftest.c:1:10:致命错误:“未找到jni.h”文件
#包括
^~~~~~~
生成1个错误。
make:**[conftest.o]错误1
无法编译JNI程序
JAVA_HOME:/Library/Internet插件/JavaAppletPlugin.plugin/Contents/HOME
Java库路径:
JNI cpp标志:
JNI链接器标志:
在/Library/Frameworks/R.framework/Resources中更新Java配置
完成。

提前感谢您的帮助。

您似乎正在连接端口465,该端口为。支持SSL 3.0,因此我建议改为连接到支持TLS的端口之一(而不是启用不安全的密码套件)。是的,但相同的代码在另一台机器上运行得很好。。。?此外,上面指定的端口为
port=587
…在一台机器上运行的代码可能在另一台机器上失败,甚至在同一台机器上的不同运行中失败。stacktrace表明它在任何情况下都连接到端口
465
,这就是为什么我认为它失败的原因,因为它试图协商一个不受支持的密码套件。尝试使用
tls=T
而不是(在MS Exchange服务器下)所示的
ssl=T
。从
ssl=TRUE
切换到
tls=TRUE
会产生相同的错误消息,但不是无法连接到端口
465
(如原始问题中所示),而是现在无法连接到
587
,至少现在你看到你没有连接到你以为是的端口。这就是为什么读取错误消息比读取配置值更有价值。为什么不运行代码以查看启用了哪些密码套件。
$ R CMD javareconf
Java interpreter : /usr/bin/java
Java version     : 1.8.0_291
Java home path   : /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home
Java compiler    : /usr/bin/javac
Java headers gen.: /usr/bin/javah
Java archive tool: /usr/bin/jar

trying to compile and link a JNI program 
detected JNI cpp flags    : 
detected JNI linker flags : -L$(JAVA_HOME)/lib/server -ljvm
clang -mmacosx-version-min=10.13 -I"/Library/Frameworks/R.framework/Resources/include" -    DNDEBUG   -I/usr/local/include   -fPIC  -Wall -g -O2  -c conftest.c -o conftest.o
conftest.c:1:10: fatal error: 'jni.h' file not found
#include <jni.h>
         ^~~~~~~
1 error generated.
make: *** [conftest.o] Error 1
Unable to compile a JNI program


JAVA_HOME        : /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home
Java library path: 
JNI cpp flags    : 
JNI linker flags : 
Updating Java configuration in /Library/Frameworks/R.framework/Resources
Done.