Отправка электронного письма из R с использованием пакета sendmailR

#macos #email #r

#macos #Адрес электронной почты #r

Вопрос:

Я пытаюсь отправить электронное письмо с 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. вы пробовали другой порт, ie 587?

2. @wkmor1 Я попытался установить порт 587 в управляющем параметре sendmailR, но, похоже, он по-прежнему обменивался данными через 25. Есть идеи?

Ответ №1:

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

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

 $ 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. Наконец, просто перезагрузите постфиксный процесс, например, с помощью

     $ sudo postfix reload 
      

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

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