Отправка письма от R с помощью пакета sendmailR - PullRequest
14 голосов
/ 03 мая 2011

Я пытаюсь отправить электронное письмо от R, используя пакет sendmailR . Приведенный ниже код отлично работает, когда я запускаю его на своем компьютере и получаю электронное письмо. Тем не менее, когда я запускаю его на 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

Есть идеи, почему это будет работать на ПК, но не на Mac? Я выключил брандмауэр на обеих машинах.

1 Ответ

26 голосов
/ 03 мая 2011

Можете ли вы отправлять электронную почту через командную строку?

Итак, сначала запустите терминал, а затем

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

, то вам это удалось.В противном случае это означает, что вы должны настроить свою почтовую систему.Я использую postfix с Gmail уже два года, и у меня никогда не было с этим проблем.По сути, вам нужно получить сертификаты Equifax, Equifax_Secure_CA.pem отсюда: http://www.geotrust.com/resources/root-certificates/. (раньше они использовали сертификаты Thawtee, но они изменились в прошлом году.) Затем, если вы использовали Gmail,

  1. Создайте relay_password в /etc/postfix и поставьте одну строку, подобную этой (с вашим правильным логином и паролем):

    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 (описанные выше шаги в основном одинаковы), но в boВ этом случае основная проблема заключается в том, что ваши данные для входа доступны в текстовом файле плана ... Кроме того, если вы хотите использовать свою учетную запись MobileMe, просто замените SMTP-сервер Gmail на smtp.me.com.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...