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

标签 macos email 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

有什么想法可以解释为什么这可以在 PC 上运行,但不能在 Mac 上运行吗?我关闭了两台机器上的防火墙。

最佳答案

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

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

$ echo “Test 123” | mail -s “Test” user@domain.com

查看/var/log/mail.log,或者更好地使用

$ tail -f /var/log/mail.log 

发送电子邮件时在不同的窗口中。如果您看到类似的内容

... 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)

那么你就成功了。否则,这意味着您必须配置邮件系统。我在 Gmail 中使用 postfix 已有两年了,从来没有遇到过任何问题。基本上,您需要从此处获取 Equifax 证书 Equifax_Secure_CA.pem:http://www.geotrust.com/resources/root-certificates/ 。 (他们之前使用 Thawtee 证书,但去年发生了变化。)然后,假设您使用 Gmail,

  1. /etc/postfix 中创建 relay_password 并输入如下一行(使用正确的登录名和密码):

    smtp.gmail.com login@gmail.com:password
    

    然后在终端中,

    $ sudo postmap /etc/postfix/relay_password 
    

    更新 Postfix 查找表。

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

    $ sudo c_rehash /etc/postfix/certs/ 
    

    (即使用 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
    
  4. 最后,只需重新加载 Postfix 进程,例如:

    $ sudo postfix reload 
    

    (start/stop 的组合也有效)。

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

关于macos - 使用 sendmailR 包从 R 发送电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5864400/

相关文章:

java - 将 javax.mail.internet.MimeMessage 发送给非 ASCII 名称的收件人?

r - 将字符串直接转换为 IDateTime

python - 最佳放置裁剪区域以捕获图像中的特征( Blob )的算法

python - 如何卸载 Anaconda(Mac)

c++ - 使用 C/C++ 在 OSX 中获取进程创建日期时间

macos - 使用 Ruby 2.0.0-p353 在 mac osx Snow Leopard 上安装 nokogiri gem 时出现问题

r - data.table中POSIXct的高效对比

macos - 如何自定义NSToolbar的上下文菜单?

javascript - NetSuite SuiteScript 1.0 电子邮件附件

delphi - 从 2 层应用程序发送电子邮件通知的建议,客户端可能未连接到 Internet