使用sendmailR包从R发送电子邮件

时间:2022-10-23 19:19:36

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,

  1. 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查找表。

  2. 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重新颁发证书)。

  3. 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
    
  4. 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,

  1. 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查找表。

  2. 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重新颁发证书)。

  3. 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
    
  4. 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服务器即可。