I am trying to send an email from R, using the sendmailR package. The code below works fine when I run it on my PC, and I recieve the email. However, when I run it with my macbook pro, it fails with the following error:
我正在尝试使用sendmailR包从R发送电子邮件。当我在我的电脑上运行它时,下面的代码工作正常,我收到了电子邮件。但是,当我用我的macbook pro运行它时,它失败并出现以下错误:
library(sendmailR)
from <- sprintf("<sendmailR@%s>", Sys.info()[4])
to <- "<myemail@gmail.com>"
subject <- "TEST"
sendmail(from, to, subject, body,
control=list(smtpServer="ASPMX.L.GOOGLE.COM"))
Error in socketConnection(host = server, port = port, blocking = TRUE) :
cannot open the connection
In addition: Warning message:
In socketConnection(host = server, port = port, blocking = TRUE) :
ASPMX.L.GOOGLE.COM:25 cannot be opened
Any ideas as to why this would work on a PC, but not a mac? I turned the firewall off on both machines.
关于为什么这可以在PC上运行但不是mac的任何想法?我在两台机器上关闭了防火墙。
1 个解决方案
#1
26
Are you able to send email via the command-line?
您是否可以通过命令行发送电子邮件?
So, first of all, fire up a Terminal and then
所以,首先,启动一个终端,然后
$ echo “Test 123” | mail -s “Test” user@domain.com
Look into /var/log/mail.log
, or better use
查看/var/log/mail.log,或者更好地使用
$ tail -f /var/log/mail.log
in a different window while you send your email. If you see something like
在发送电子邮件时,在另一个窗口中。如果你看到类似的东西
... setting up TLS connection to smtp.gmail.com[xxx.xx.xxx.xxx]:587
... Trusted TLS connection established to smtp.gmail.com[xxx.xx.xxx.xxx]:587:\
TLSv1 with cipher RC4-MD5 (128/128 bits)
then you succeeded. Otherwise, it means you have to configure you mailing system. I use postfix
with Gmail for two years now, and I never had have problem with it. Basically, you need to grab the Equifax certificates, Equifax_Secure_CA.pem
from here: http://www.geotrust.com/resources/root-certificates/. (They were using Thawtee certificates before but they changed last year.) Then, assuming you used Gmail,
然后你成功了。否则,这意味着您必须配置邮件系统。我使用postfix和Gmail已经两年了,我从来没有遇到过这个问题。基本上,您需要从此处获取Equifax证书Equifax_Secure_CA.pem:http://www.geotrust.com/resources/root-certificates/。 (他们之前使用过Thawtee证书,但他们去年有所改变。)然后,假设您使用了Gmail,
-
Create
relay_password
in/etc/postfix
and put a single line like this (with your correct login and password):在/ etc / postfix中创建relay_password并放置一行(使用正确的登录名和密码):
smtp.gmail.com login@gmail.com:password
then in a Terminal,
然后在一个终端,
$ sudo postmap /etc/postfix/relay_password
to update Postfix lookup table.
更新Postfix查找表。
-
Add the certificates in
/etc/postfix/certs
, or any folder you like, then然后在/ etc / postfix / certs或任何您喜欢的文件夹中添加证书
$ sudo c_rehash /etc/postfix/certs/
(i.e., rehash the certificates with Openssl).
(即,使用Openssl重新颁发证书)。
-
Edit
/etc/postfix/main.cf
so that it includes the following lines (adjust the paths if needed):编辑/etc/postfix/main.cf以使其包含以下行(如果需要,调整路径):
relayhost = smtp.gmail.com:587 smtp_sasl_auth_enable = yes smtp_sasl_password_maps = hash:/etc/postfix/relay_password smtp_sasl_security_options = noanonymous smtp_tls_security_level = may smtp_tls_CApath = /etc/postfix/certs smtp_tls_session_cache_database = btree:/etc/postfix/smtp_scache smtp_tls_session_cache_timeout = 3600s smtp_tls_loglevel = 1 tls_random_source = dev:/dev/urandom
-
Finally, just reload the Postfix process, with e.g.
最后,只需重新加载Postfix进程,例如
$ sudo postfix reload
(a combination of
start
/stop
works too).(启动/停止的组合也起作用)。
You can choose a different port for the SMTP, e.g. 465. It’s still possible to use SASL without TLS (the above steps are basically the same), but in both case the main problem is that your login informations are available in a plan text file... Also, should you want to use your MobileMe account, just replace the Gmail SMTP server with smtp.me.com
.
您可以为SMTP选择其他端口,例如465.仍然可以在没有TLS的情况下使用SASL(上述步骤基本相同),但在这两种情况下,主要问题是您的登录信息在计划文本文件中可用...另外,如果您想使用MobileMe帐户,只需使用smtp.me.com替换Gmail SMTP服务器即可。
#1
26
Are you able to send email via the command-line?
您是否可以通过命令行发送电子邮件?
So, first of all, fire up a Terminal and then
所以,首先,启动一个终端,然后
$ echo “Test 123” | mail -s “Test” user@domain.com
Look into /var/log/mail.log
, or better use
查看/var/log/mail.log,或者更好地使用
$ tail -f /var/log/mail.log
in a different window while you send your email. If you see something like
在发送电子邮件时,在另一个窗口中。如果你看到类似的东西
... setting up TLS connection to smtp.gmail.com[xxx.xx.xxx.xxx]:587
... Trusted TLS connection established to smtp.gmail.com[xxx.xx.xxx.xxx]:587:\
TLSv1 with cipher RC4-MD5 (128/128 bits)
then you succeeded. Otherwise, it means you have to configure you mailing system. I use postfix
with Gmail for two years now, and I never had have problem with it. Basically, you need to grab the Equifax certificates, Equifax_Secure_CA.pem
from here: http://www.geotrust.com/resources/root-certificates/. (They were using Thawtee certificates before but they changed last year.) Then, assuming you used Gmail,
然后你成功了。否则,这意味着您必须配置邮件系统。我使用postfix和Gmail已经两年了,我从来没有遇到过这个问题。基本上,您需要从此处获取Equifax证书Equifax_Secure_CA.pem:http://www.geotrust.com/resources/root-certificates/。 (他们之前使用过Thawtee证书,但他们去年有所改变。)然后,假设您使用了Gmail,
-
Create
relay_password
in/etc/postfix
and put a single line like this (with your correct login and password):在/ etc / postfix中创建relay_password并放置一行(使用正确的登录名和密码):
smtp.gmail.com login@gmail.com:password
then in a Terminal,
然后在一个终端,
$ sudo postmap /etc/postfix/relay_password
to update Postfix lookup table.
更新Postfix查找表。
-
Add the certificates in
/etc/postfix/certs
, or any folder you like, then然后在/ etc / postfix / certs或任何您喜欢的文件夹中添加证书
$ sudo c_rehash /etc/postfix/certs/
(i.e., rehash the certificates with Openssl).
(即,使用Openssl重新颁发证书)。
-
Edit
/etc/postfix/main.cf
so that it includes the following lines (adjust the paths if needed):编辑/etc/postfix/main.cf以使其包含以下行(如果需要,调整路径):
relayhost = smtp.gmail.com:587 smtp_sasl_auth_enable = yes smtp_sasl_password_maps = hash:/etc/postfix/relay_password smtp_sasl_security_options = noanonymous smtp_tls_security_level = may smtp_tls_CApath = /etc/postfix/certs smtp_tls_session_cache_database = btree:/etc/postfix/smtp_scache smtp_tls_session_cache_timeout = 3600s smtp_tls_loglevel = 1 tls_random_source = dev:/dev/urandom
-
Finally, just reload the Postfix process, with e.g.
最后,只需重新加载Postfix进程,例如
$ sudo postfix reload
(a combination of
start
/stop
works too).(启动/停止的组合也起作用)。
You can choose a different port for the SMTP, e.g. 465. It’s still possible to use SASL without TLS (the above steps are basically the same), but in both case the main problem is that your login informations are available in a plan text file... Also, should you want to use your MobileMe account, just replace the Gmail SMTP server with smtp.me.com
.
您可以为SMTP选择其他端口,例如465.仍然可以在没有TLS的情况下使用SASL(上述步骤基本相同),但在这两种情况下,主要问题是您的登录信息在计划文本文件中可用...另外,如果您想使用MobileMe帐户,只需使用smtp.me.com替换Gmail SMTP服务器即可。