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

Zac*_*ach 14 email macos r

我正在尝试使用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
Run Code Online (Sandbox Code Playgroud)

关于为什么这可以在PC上运行但不是mac的任何想法?我在两台机器上关闭了防火墙.

chl*_*chl 26

您是否可以通过命令行发送电子邮件?

所以,首先,启动一个终端,然后

$ echo “Test 123” | mail -s “Test” user@domain.com
Run Code Online (Sandbox Code Playgroud)

调查/var/log/mail.log或更好地使用

$ tail -f /var/log/mail.log 
Run Code Online (Sandbox Code Playgroud)

在发送电子邮件时,在另一个窗口中.如果你看到类似的东西

... 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)
Run Code Online (Sandbox Code Playgroud)

然后你成功了.否则,这意味着您必须配置邮件系统.我用postfixGmail已经两年了,我从来没有遇到过这个问题.基本上,您需要Equifax_Secure_CA.pem从这里获取Equifax证书:http://www.geotrust.com/resources/root-certificates/.(他们之前使用过Thawtee证书,但他们去年有所改变.)然后,假设你使用了Gmail,

  1. 创建relay_password中/etc/postfix,把一行像这样(与你的正确的用户名和密码):

    smtp.gmail.com login@gmail.com:password
    
    Run Code Online (Sandbox Code Playgroud)

    然后在终端,

    $ sudo postmap /etc/postfix/relay_password 
    
    Run Code Online (Sandbox Code Playgroud)

    更新Postfix查找表.

  2. 然后添加证书/etc/postfix/certs或任何您喜欢的文件夹

    $ sudo c_rehash /etc/postfix/certs/ 
    
    Run Code Online (Sandbox Code Playgroud)

    (即,使用Openssl重新扫描证书).

  3. 编辑/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
    
    Run Code Online (Sandbox Code Playgroud)
  4. 最后,重新加载Postfix进程,例如

    $ sudo postfix reload 
    
    Run Code Online (Sandbox Code Playgroud)

    (组合start/ stop也有效).

您可以为SMTP选择不同的端口,例如465.仍然可以使用没有TLS的SASL(上述步骤基本相同),但在这两种情况下,主要问题是您的登录信息在计划文本文件中可用...此外,如果您想使用MobileMe帐户,只需将Gmail SMTP服务器替换为.smtp.me.com

  • +1感谢您提供非常详细的说明 (3认同)