Используйте sendmailR с Windows

Я пытаюсь запустить sendmailR в Windows со следующим кодом:

## Not run: 
from <- "<[email protected]>" # sprintf("<sendmailR@\\%s>", Sys.info()[4])
to <- "<[email protected]>"
subject <- "Hello from R"
body <- list("It works!", mime_part(iris))
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) :
  smtp.gmail.com [email protected]:statisfun:25 cannot be opened

Ответ здесь дает решение для Linux и Буду признателен за советы для пользователей Windows.

Спасибо.


person Tal Galili    schedule 14.03.2013    source источник
comment
Это не отвечает на ваш вопрос, но в качестве альтернативы вы можете использовать мой GitHub gmailR, который, как я знаю, работает с windows и для gmail. Это то, что я законсервировал как пакет для личного использования, но это не моя работа.   -  person Tyler Rinker    schedule 15.03.2013
comment
Хороший Тайлер - спасибо. :) p.s: мне все еще было бы интересно разобраться с этой проблемой sendmailR...   -  person Tal Galili    schedule 15.03.2013


Ответы (4)


Вы можете попробовать новый пакет mailR: http://cran.r-project.org/web/packages/mailR/index.html

Затем должен работать следующий вызов:

send.mail(from = "[email protected]",
          to = "[email protected]",
          subject = "Subject of the email",
          body = "Body of the email",
          smtp = list(host.name = "smtp.gmail.com", port = 465, user.name = "tal.galili", passwd = "PASSWORD", ssl = TRUE),
          authenticate = TRUE,
          send = TRUE)
person Rahul Premraj    schedule 11.03.2014
comment
Я все еще получаю сообщение об ошибке. Я получал ту же ошибку, что и ОП, и теперь, когда я попробовал это, я получаю Check documentation to include all mandatory parameters to establisg SMTP connection. ... Да. Там сказано установить, а не установить... - person Nedinator; 28.05.2015
comment
mailR использует rJava... это означает, что вам нужно сначала заставить его работать - person lebatsnok; 22.05.2018

Раньше я отправлял электронные письма через R, используя эти строки.

Предположим, ваша электронная почта [email protected] использует ОС Windows (моя операционная система)

library(sendmailR)

# 1 case
from <- sprintf("<sendmailR@%s>", Sys.info()[4]) 
to <- "<[email protected]>" 
subject <- "Hello from R" 
msg <- "my first email" 
sendmail(from, to, subject, msg,control=list(smtpServer="ASPMX.L.GOOGLE.COM")) 

# 2 case
from <- sprintf("<[email protected]>", Sys.info()[4]) 
to <- "<[email protected]>" 
subject <- "Hello from R" 
msg <- "my first email" 
sendmail(from, to, subject, msg,control=list(smtpServer="ASPMX.L.GOOGLE.COM")) 
person Gianni Spear    schedule 19.03.2013
comment
Привет Хианни. В обоих случаях я получаю: Ошибка в wait_for(250): Ошибка SMTP: 5.7.1 [37.142.250.150] IP-адрес, который вы используете для отправки почты, не авторизован для - person Tal Galili; 21.03.2013
comment
Эй, @TalGalili странно, я тестировал и не получил никакого сообщения об ошибке, извините. - person Gianni Spear; 21.03.2013
comment
@TalGalili извините, если я не могу быть более полезным - person Gianni Spear; 21.03.2013
comment
Я ценю вашу попытку :) - person Tal Galili; 22.03.2013

Каждый раз, когда sendmailR не проходит аутентификацию, появляется не очень полезное сообщение о том, что

Error in if (code == lcode) { : argument is of length zero

Это может быть по многим причинам, включая причины на стороне сервера. В моем случае мне нужно было внести свой IP-адрес в белый список сервера. @alko989 объявляет в проблему с использованием sendemailR, что authentication ... is not supported by sendmailR, и по состоянию на февраль 2015 г. 20 публикация sendmailR https://cran.r-project.org/web/packages/sendmailR/sendmailR.pdf, единственными управляющими параметрами являются smtpServer, smtpPort и verbose, поэтому ничего для пользователя, пароля, ssl, tls и т. д. Сегодня почтовые серверы, как правило, гораздо более безопасны, чем почтовые серверов прошлого, так что это серьезное ограничение sendmailR.

person woodvi    schedule 07.12.2018
comment
Я знаю, что это может происходить по многим причинам, но самая распространенная из них, с которой я столкнулся (ну, в любом случае, это случилось дважды!), заключается в том, что ИТ-специалисты переименовали почтовый сервер, который вы, вероятно, жестко запрограммировали в своем сценарии для аргумента «control» Функция отправки почты. - person CClarke; 26.02.2019

В качестве альтернативы использованию sendmailR вы можете попробовать следующее:

Соберите вместе VB-Script (см., например, http://www.paulsadowski.com/wsh/cdo.htm ), а затем вызвать его через оболочку.

Это может выглядеть так:

SendMail <- function(from="[email protected]",to="[email protected]",text="Hallo",subject="Sag Hallo",smtp="smtp.my.server.de",user="me.myself.and.i",pw="123"){
require(stringr)
part1 <- "Const cdoSendUsingPickup = 1 'Send message using the local SMTP service pickup directory. 
Const cdoSendUsingPort = 2 'Send the message using the network (SMTP over the network). 
Const cdoAnonymous = 0 'Do not authenticate
Const cdoBasic = 1 'basic (clear-text) authentication 
Const cdoNTLM = 2 'NTLM "

part2 <- paste(paste("Set objMessage = CreateObject(",'"',"CDO.Message",'"',")" ,sep=""),
paste("objMessage.Subject = ",'"',subject,'"',sep=""),
paste("objMessage.From = ",'"',from,'"',sep=""),
paste("objMessage.To = ",'"',to,'"',sep=""),
paste("objMessage.TextBody = ",'"',text,'"',sep=""),
sep="\n")

part3 <- paste(
"'==This section provides the configuration information for the remote SMTP server. 

objMessage.Configuration.Fields.Item _ 
(\"http://schemas.microsoft.com/cdo/configuration/sendusing\") = 2

'Name or IP of Remote SMTP Server 
objMessage.Configuration.Fields.Item _ 
(\"http://schemas.microsoft.com/cdo/configuration/smtpserver\") = ",'"',smtp,'"'," 

'Type of authentication, NONE, Basic (Base64 encoded), NTLM 
objMessage.Configuration.Fields.Item _ 
(\"http://schemas.microsoft.com/cdo/configuration/smtpauthenticate\") = cdoBasic 

'Your UserID on the SMTP server 
objMessage.Configuration.Fields.Item _ 
(\"http://schemas.microsoft.com/cdo/configuration/sendusername\") = ",'"',user,'"'," 

'Your password on the SMTP server 
objMessage.Configuration.Fields.Item _ 
(\"http://schemas.microsoft.com/cdo/configuration/sendpassword\") = ",'"',pw,'"', "

'Server port (typically 25) 
objMessage.Configuration.Fields.Item _ 
(\"http://schemas.microsoft.com/cdo/configuration/smtpserverport\") = 25 

'Use SSL for the connection (False or True) 
objMessage.Configuration.Fields.Item _ 
(\"http://schemas.microsoft.com/cdo/configuration/smtpusessl\") = False 

'Connection Timeout in seconds (the maximum time CDO will try to establish a connection to the SMTP server) 
objMessage.Configuration.Fields.Item _ 
(\"http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout\") = 60 
objMessage.Configuration.Fields.Update

'==End remote SMTP server configuration section== 

objMessage.Send 
",sep="")

vbsscript <- paste(part1,part2,part3,sep="\n\n\n")
str_split(vbsscript,"\n")
writeLines(vbsscript, "sendmail.vbs")
shell("sendmail.vbs")
unlink("sendmail.vbs")
}

... и используйте его так:

SendMail(
    from="[email protected]",
    to="[email protected]",
    text="Hallo",   
    subject="readThis",
    smtp="smtp.andI.com",
    user="[email protected]",
    pw="123456"
    )
person petermeissner    schedule 05.05.2013