#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,
-
Создайте
relay_password
в/etc/postfix
и поместите одну строку, подобную этой (с вашим правильным логином и паролем):smtp.gmail.com login@gmail.com: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
-
Наконец, просто перезагрузите постфиксный процесс, например, с помощью
$ sudo postfix reload
(комбинация
start
/stop
тоже работает).
Вы можете выбрать другой порт для SMTP, например 465. По-прежнему возможно использовать SASL без TLS (вышеуказанные шаги в основном одинаковы), но в обоих случаях основная проблема заключается в том, что ваши регистрационные данные доступны в текстовом файле плана… Кроме того, если вы хотите использовать свою учетную запись MobileMe, просто замените SMTP-сервер Gmail на smtp.me.com
.