Подтвердить что ты не робот

Отправка электронной почты из R с помощью пакета sendmailR

Я пытаюсь отправить электронное письмо из R, используя пакет sendmailR. В приведенном ниже коде отлично работает, когда я запускаю его на своем ПК, и получаю электронное письмо. Однако, когда я запускаю его с помощью моего macbook pro, он выходит из строя со следующей ошибкой:

library(sendmailR)
from <- sprintf("<[email protected]%s>", Sys.info()[4])
to <- "<[email protected]>"
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? Я отключил брандмауэр на обеих машинах.

4b9b3361

Ответ 1

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

Итак, прежде всего, запустите терминал, а затем

$ echo "Test 123" | mail -s "Test" [email protected]

Посмотрите /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,

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

    smtp.gmail.com [email protected]:password
    

    то в терминале

    $ sudo postmap /etc/postfix/relay_password 
    

    чтобы обновить таблицу поиска Postfix.

  • Добавьте сертификаты в /etc/postfix/certs или любую понравившуюся вам папку, затем

    $ sudo c_rehash /etc/postfix/certs/ 
    

    (т.е. перефразировать сертификаты с помощью Openssl).

  • Измените /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
    
  • Наконец, просто перезагрузите процесс Postfix, например.

    $ sudo postfix reload 
    

    (также работает комбинация start/stop).

Вы можете выбрать другой порт для SMTP, например. 465. Его все еще можно использовать SASL без TLS (приведенные выше шаги в основном одинаковы), но в обоих случаях основная проблема заключается в том, что ваши данные для входа доступны в текстовом файле плана... Также, если вы хотите использовать свою учетную запись MobileMe, просто замените SMTP-сервер Gmail на smtp.me.com.