[R-br] Mandar email pelo R

Daniel Ikenaga oladani em gmail.com
Sexta Março 15 16:55:03 BRT 2013


Pedro,

O que diferencia a porta 25 da 587. Antes (porta 25), seria possível enviar
um email como sendo de outra
pessoa, note, que na configuração do pacote não há a exigência da senha de
email. Também era possível
ler todos os emails que trafegam pelas conexões. Utilizando a outra porta e
um protocolo diferente, passa
a ter três etapas, na primeira a troca de informação sobre a encriptação e
a segunda o envio do usuário e
senha e após isso uma nova encriptação para o envio do email. Isso, a atual
versão do pacote não faz.

///
List of options:

smtpServerSMTP server to contact. This can either be the mail server
responsible for the destination addresses domain or
a smarthost provided by your ISP or institution.* SMTP AUTH is currently
unsupported.*

smtpPortSMTP port to use. Usually 25 but some institutions require the use
of the submission service (port 587).

verboseShow detailed information about message submission. Useful for
debugging.
///


Não encontrei formas de modificar a porta, tanto no socketConnection como
no sendmail control.
Então, sem uma nova atualização, o pacote me parece inutilizável.

Uma saída que talvez seja interessante é enviar para uma base de dados
(mysql por exemplo) e no servidor desta base
e, que também tenha sendmail 587, deixar um  schedule rodando, veja o Cron (
http://en.wikipedia.org/wiki/Cron).

Acho que é uma forma...

Abraços

 Daniel Ikenaga
    *@dialetica* <http://twitter.com/dialetica>


2013/3/13 Cleber N.Borges <klebyn em yahoo.com.br>

>
> no help do pacote diz ter uma função 'sendmail_options'
>
> com um parametro 'smtpPortSMTP' especificamente
> para mudar a porta 25.
>
> -----------
>   • smtpPortSMTP port to use. Usually 25 but some institutions
>           require the use of the submission service (port 587).
> ----------
>
> talvez vale a pena fazer um ultimo teste com esse detalhe...
>
> não vi a thread toda, se já tentou isso, me desculpe pela bola fora,
> caso não, fica a dica
>
>
> cleber
>
>
>
>
>
>
>
>
>
>
>
>
>
> Em 13/03/2013 17:31, Pedro Emmanuel Alvarenga Americano do Brasil escreveu:
>
>  Daniel,
>
>  Quando voce diz um sendmail externo seria do tipo ter um thunderbird
> configurado e o bat executaria o thunderbird e mandaria a mensagem com o
> arquivo anexado?
>
>  Bom... tem alguns bacanas na internet que ja colocaram umas coisas
> assim, mas se for assim, eu preferiria fazer manualmente mesmo. Eu queria
> simplificar e não complicar.
>
>  Quanto a função send.email na mensagem anterior, voce tem algum
> comentário porque dá aquele erro de conexão?
>
>  Abraço,
>
> Dr. Pedro Emmanuel A. A. do Brasil
> Curriculum Lattes:  http://lattes.cnpq.br/6597654894290806
> Instituto de Pesquisa Clínica Evandro Chagas
> Fundação Oswaldo Cruz
> Rio de Janeiro - Brasil
> Av. Brasil 4365,
> CEP 21040-360,
> Tel 55 21 3865-9648
> email: pedro.brasil em ipec.fiocruz.br
> email: emmanuel.brasil em gmail.com
>
> ---Apoio aos softwares livres
> www.zotero.org - gerenciamento de referências bibliográficas.
> www.broffice.org ou www.libreoffice.org - textos, planilhas ou
> apresentações.
> www.epidata.dk - entrada de dados.
> www.r-project.org - análise de dados.
> www.ubuntu.com - sistema operacional
>
>
> Em 13 de março de 2013 17:34, Daniel Ikenaga <oladani em gmail.com> escreveu:
>
>> Fiz alguns testes, mas, é mesmo a limitação do package. Não é possível
>> mudar a porta 25. Não
>> consegui criar uma porta 25 em um servidor para testar.
>>
>>  Penso em duas saídas:
>>
>>  Instalar um servidor com porta 25, o que acho arriscado, pois
>> facilmente cairia na black list e spam,
>> ou fazer um bat num sendmail externo para ler a atualização de um arquivo
>> que seria salvo do R.
>>
>>
>> Abraços
>>
>>  Daniel Ikenaga
>>     *@dialetica* <http://twitter.com/dialetica>
>>
>>
>> 2013/3/13 Pedro Emmanuel Alvarenga Americano do Brasil <
>> emmanuel.brasil em gmail.com>
>>
>>>  Daniel,
>>>
>>>  Mesmo mudando a porta, a messagem de erro continua. Acredito que
>>> dentro da função deve ter um bug que mantem a porta 25 apesar de informar
>>> outra porta como argumento da função.
>>>
>>>  > sendmail(from, to, subject,
>>> body,control=list(smtpPortSMTP=587,verboseShow=TRUE,smtpServer="
>>> ASPMX.L.GOOGLE.COM"))
>>>  Erro em socketConnection(host = server, port = port, blocking = TRUE)
>>> :
>>>   não é possível abrir a conexão
>>> Além disso: Mensagens de aviso perdidas:
>>> In socketConnection(host = server, port = port, blocking = TRUE) :
>>>   ASPMX.L.GOOGLE.COM:25 cannot be opened
>>>
>>>  Por enquanto vou fazendo manualmente mesmo.
>>>
>>>  Abraço forte,
>>>
>>>
>>>
>>>
>>> Dr. Pedro Emmanuel A. A. do Brasil
>>> Curriculum Lattes:  http://lattes.cnpq.br/6597654894290806
>>> Instituto de Pesquisa Clínica Evandro Chagas
>>> Fundação Oswaldo Cruz
>>> Rio de Janeiro - Brasil
>>> Av. Brasil 4365,
>>> CEP 21040-360,
>>> Tel 55 21 3865-9648 <55%2021%203865-9648>
>>> email: pedro.brasil em ipec.fiocruz.br
>>> email: emmanuel.brasil em gmail.com
>>>
>>> ---Apoio aos softwares livres
>>> www.zotero.org - gerenciamento de referências bibliográficas.
>>> www.broffice.org ou www.libreoffice.org - textos, planilhas ou
>>> apresentações.
>>> www.epidata.dk - entrada de dados.
>>> www.r-project.org - análise de dados.
>>> www.ubuntu.com - sistema operacional
>>>
>>>
>>>  Em 12 de março de 2013 15:16, Daniel Ikenaga <oladani em gmail.com>escreveu:
>>>
>>>  Desconheço a utilização avançada de R, mas teu problema não seria na
>>>> porta 25?
>>>>
>>>>  Faz mais de 2 mês que o Google não opera mais com a porta 25, só com
>>>> a 587 em SSL, daí,
>>>>  se não houver compatibilidade com smtp em ssl, fosse o caso de usar
>>>> outro servidor.
>>>>
>>>>
>>>> Abraços
>>>>
>>>>  Daniel Ikenaga
>>>>     *@dialetica* <http://twitter.com/dialetica>
>>>>
>>>>
>>>>  On Mon, Mar 11, 2013 at 10:23 AM, Pedro Emmanuel Alvarenga Americano
>>>> do Brasil <emmanuel.brasil em gmail.com> wrote:
>>>>
>>>>>   Amigos de R,
>>>>>
>>>>>  Sei que essa questão volta algumas vezes na lista mas estou
>>>>> empacado. Estou fazendo um data management de um projeto em que consiste em
>>>>> repetidas vezes, tipo toda semana, verificar quantos voluntários entraram
>>>>> no proejto, dados inconsistentes, dados ausentes e coisas assim. Então, eu
>>>>> consegui fazer um script para esse fim em que gera um arquivo com algumas
>>>>> tabelas e graficos.
>>>>>
>>>>>  Agora eu gostaria de incluir nesse script o envio de um email pra
>>>>> mim mesmo com esse arquivo, para que eu possa verificar e depois encaminhar
>>>>> para os outros participantes. Sei que existe o sendmailR, mas não estou
>>>>> conseguindo fazer funcionar. Encontrei um catatau de gente referindo o
>>>>> mesmo erro em diversos diferentes foruns:
>>>>>
>>>>>  > sendmail(from, to, subject, body,control=list(smtpServer="
>>>>> ASPMX.L.GOOGLE.COM"))
>>>>> Erro em socketConnection(host = server, port = port, blocking = TRUE)
>>>>> :
>>>>>   não é possível abrir a conexão
>>>>> Além disso: Mensagens de aviso perdidas:
>>>>> In socketConnection(host = server, port = port, blocking = TRUE) :
>>>>>   ASPMX.L.GOOGLE.COM:25 cannot be opened
>>>>>
>>>>>
>>>>>  Depois, consegui encontrar essa função em um dos foruns. O autor
>>>>> fala que funciona, mas comigo tem dado um erro de conectividade e eu não
>>>>> sabendo como dar a volta nesse erro. Será que tem alguma relação com o
>>>>> proxy?
>>>>>
>>>>>  > send.email
>>>>> function(to, from, subject,
>>>>>   message, attachment=NULL,
>>>>>   username, password,
>>>>>   server="smtp.gmail.com:587",
>>>>>   confirmBeforeSend=TRUE){
>>>>>   # to: a list object of length 1.  Using list("Recipient" = "
>>>>> recip em somewhere.net") will send the message to the address but
>>>>>   #     the name will appear instead of the address.
>>>>>   # from: a list object of length 1.  Same behavior as 'to'
>>>>>   # subject: Character(1) giving the subject line.
>>>>>   # message: Character(1) giving the body of the message
>>>>>   # attachment: Character(1) giving the location of the attachment
>>>>>   # username: character(1) giving the username.  If missing and you
>>>>> are using Windows, R will prompt you for the username.
>>>>>   # password: character(1) giving the password.  If missing and you
>>>>> are using Windows, R will prompt you for the password.
>>>>>    # server: character(1) giving the smtp server.
>>>>>   # confirmBeforeSend: Logical.  If True, a dialog box appears seeking
>>>>> confirmation before sending the e-mail.  This is to
>>>>>   #                    prevent me to send multiple updates to a
>>>>> collaborator while I am working interactively.
>>>>>
>>>>>   if (!is.list(to) | !is.list(from)) stop("'to' and 'from' must be
>>>>> lists")
>>>>>   if (length(from) > 1) stop("'from' must have length 1")
>>>>>   if (length(to) > 1) stop("'send.email' currently only supports one
>>>>> recipient e-mail address")
>>>>>   if (length(attachment) > 1) stop("'send.email' can currently send
>>>>> only one attachment")
>>>>>    if (length(message) > 1){
>>>>>     stop("'message' must be of length 1")
>>>>>     message <- paste(message, collapse="\\n\\n")
>>>>>   }
>>>>>
>>>>>   if (is.null(names(to))) names(to) <- to
>>>>>   if (is.null(names(from))) names(from) <- from
>>>>>   if (!is.null(attachment)) if (!file.exists(attachment))
>>>>> stop(paste("'", attachment, "' does not exist!", sep=""))
>>>>>
>>>>>   if (missing(username)) username <- winDialogString("Please enter
>>>>> your e-mail username", "")
>>>>>   if (missing(password)) password <- winDialogString("Please enter
>>>>> your e-mail password", "")
>>>>>
>>>>>   require(rJython)
>>>>>   rJython <- rJython()
>>>>>
>>>>>    rJython$exec("import smtplib")
>>>>>   rJython$exec("import os")
>>>>>   rJython$exec("from email.MIMEMultipart import MIMEMultipart")
>>>>>   rJython$exec("from email.MIMEBase import MIMEBase")
>>>>>   rJython$exec("from email.MIMEText import MIMEText")
>>>>>   rJython$exec("from email.Utils import COMMASPACE, formatdate")
>>>>>   rJython$exec("from email import Encoders")
>>>>>   rJython$exec("import email.utils")
>>>>>
>>>>>    mail<-c(
>>>>>   #Email settings
>>>>>   paste("fromaddr = '", from, "'", sep=""),
>>>>>   paste("toaddrs  = '", to, "'", sep=""),
>>>>>   "msg = MIMEMultipart()",
>>>>>   paste("msg.attach(MIMEText('", message, "'))", sep=""),
>>>>>   paste("msg['From'] = email.utils.formataddr(('", names(from), "',
>>>>> fromaddr))", sep=""),
>>>>>   paste("msg['To'] = email.utils.formataddr(('", names(to), "',
>>>>> toaddrs))", sep=""),
>>>>>   paste("msg['Subject'] = '", subject, "'", sep=""))
>>>>>
>>>>>   if (!is.null(attachment)){
>>>>>     mail <- c(mail,
>>>>>       paste("f = '", attachment, "'", sep=""),
>>>>>      "part=MIMEBase('application', 'octet-stream')",
>>>>>      "part.set_payload(open(f, 'rb').read())",
>>>>>      "Encoders.encode_base64(part)",
>>>>>      "part.add_header('Content-Disposition', 'attachment;
>>>>> filename=\"%s\"' % os.path.basename(f))",
>>>>>      "msg.attach(part)")
>>>>>   }
>>>>>
>>>>>  #SMTP server credentials
>>>>>    mail <- c(mail,
>>>>>     paste("username = '", username, "'", sep=""),
>>>>>     paste("password = '", password, "'", sep=""),
>>>>>
>>>>>  #Set SMTP server and send email, e.g., google mail SMTP server
>>>>>     paste("server = smtplib.SMTP('", server, "')", sep=""),
>>>>>     "server.ehlo()",
>>>>>     "server.starttls()",
>>>>>     "server.ehlo()",
>>>>>     "server.login(username,password)",
>>>>>     "server.sendmail(fromaddr, toaddrs, msg.as_string())",
>>>>>     "server.quit()")
>>>>>
>>>>>    message.details <-
>>>>>      paste("To:               ", names(to), " (", unlist(to), ")",
>>>>> "\n",
>>>>>           "From:             ", names(from), " (", unlist(from), ")",
>>>>> "\n",
>>>>>           "Using server:     ", server, "\n",
>>>>>           "Subject:          ", subject, "\n",
>>>>>           "With Attachments: ", attachment, "\n",
>>>>>           "And the message:\n", message, "\n", sep="")
>>>>>
>>>>>    if (confirmBeforeSend)
>>>>>     SEND <- winDialog("yesnocancel", paste("Are you sure you want to
>>>>> send this e-mail to ", unlist(to), "?", sep=""))
>>>>>    else SEND <- "YES"
>>>>>
>>>>>   if (SEND %in% "YES"){
>>>>>     jython.exec(rJython,mail)
>>>>>     cat(message.details)
>>>>>   }
>>>>>    else cat("E-mail Delivery was Canceled by the User")
>>>>> }
>>>>>
>>>>>  from <- list("Recipient" = "emmanuel.brasil em gmail.com")
>>>>> to <- list("Recipient" = "emmanuel.brasil em gmail.com")
>>>>> subject <- paste0("Pendencias Nomograma de ",Sys.time())
>>>>>  message <- "Mensagem automática com relatório de pendências do
>>>>> projeto Nomograma."
>>>>> attachment <- 'c:/banco/nomograma/Controle_recrutamento.doc'
>>>>> > send.email(to,from,subject,message,attachment,'
>>>>> emmanuel.brasil em gmail.com','...',confirmBeforeSend=FALSE)
>>>>>    Erro em jython.exec(rJython, mail) : (62, 'Connection refused')
>>>>>
>>>>>  Qualquer luz é bem vinda.
>>>>>
>>>>>  Abraço forte,
>>>>>
>>>>>  Dr. Pedro Emmanuel A. A. do Brasil
>>>>> Curriculum Lattes:  http://lattes.cnpq.br/6597654894290806
>>>>> Instituto de Pesquisa Clínica Evandro Chagas
>>>>> Fundação Oswaldo Cruz
>>>>> Rio de Janeiro - Brasil
>>>>> Av. Brasil 4365,
>>>>> CEP 21040-360,
>>>>> Tel 55 21 3865-9648 <55%2021%203865-9648>
>>>>> email: pedro.brasil em ipec.fiocruz.br
>>>>> email: emmanuel.brasil em gmail.com
>>>>>
>>>>> ---Apoio aos softwares livres
>>>>> www.zotero.org - gerenciamento de referências bibliográficas.
>>>>> www.broffice.org ou www.libreoffice.org - textos, planilhas ou
>>>>> apresentações.
>>>>> www.epidata.dk - entrada de dados.
>>>>> www.r-project.org - análise de dados.
>>>>> www.ubuntu.com - sistema operacional
>>>>>
>>>>>  _______________________________________________
>>>>> R-br mailing list
>>>>> R-br em listas.c3sl.ufpr.br
>>>>> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
>>>>> Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça
>>>>> código mínimo reproduzível.
>>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> R-br mailing list
>>>> R-br em listas.c3sl.ufpr.br
>>>> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
>>>> Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça
>>>> código mínimo reproduzível.
>>>>
>>>
>>>
>>> _______________________________________________
>>> R-br mailing list
>>> R-br em listas.c3sl.ufpr.br
>>> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
>>> Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça
>>> código mínimo reproduzível.
>>>
>>
>>
>> _______________________________________________
>> R-br mailing list
>> R-br em listas.c3sl.ufpr.br
>> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
>> Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça
>> código mínimo reproduzível.
>>
>
>
>
> _______________________________________________
> R-br mailing listR-br em listas.c3sl.ufpr.brhttps://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
> Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
>
>
>
> _______________________________________________
> R-br mailing list
> R-br em listas.c3sl.ufpr.br
> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
> Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça
> código mínimo reproduzível.
>
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20130315/d32f2f6d/attachment.html>


Mais detalhes sobre a lista de discussão R-br