使用gmail通过电子邮件发送R中的附件

Tyl*_*ker 23 python jython r

我希望使用gmail在R中发送带有附件的电子邮件.我发现sendmailR不能与gmail一起使用,因为它需要身份验证(我无法让它与gmail一起工作所以我认为这是真的,除非有人告诉我我错了,在这种情况下我会发布R输出和错误消息).我在这里找到了一个代码片段(LINK).由于该网站建议代码未格式化为发送附件,但我已经让它发送电子邮件.我想扩展此代码以发送附件(在电子邮件通信中,此代码的作者无法扩展代码以发送附件).

我想使用gmail发送带有R的电子邮件.我是一个拥有2.14 beta版R的Windows 7用户.

发送电子邮件但不发送附件的代码:

require(rJython) 
rJython <- rJython() 
rJython$exec( "import smtplib" ) 
rJython$exec("from email.MIMEText import MIMEText") 
rJython$exec("import email.utils") 

mail<-c( 
#Email settings 
"fromaddr = 'bigbird@gmail.com'", 
"toaddrs  = 'oscarthegrouch@gmail.com'", 
"msg = MIMEText('This is the body of the message.')", 
"msg['From'] = email.utils.formataddr(('sender name', fromaddr))", 
"msg['To'] = email.utils.formataddr(('recipient name', toaddrs))", 
"msg['Subject'] = 'Simple test message'", 

#SMTP server credentials 
"username = 'bigbird@gmail.com'", 
"password = 'pw'", 

#Set SMTP server and send email, e.g., google mail SMTP server 
"server = smtplib.SMTP('smtp.gmail.com:587')", 
"server.ehlo()", 
"server.starttls()", 
"server.ehlo()", 
"server.login(username,password)", 
"server.sendmail(fromaddr, toaddrs, msg.as_string())", 
"server.quit()") 

jython.exec(rJython,mail) 
Run Code Online (Sandbox Code Playgroud)

请注意,此消息在talkstats.com上发布.我没有在那里收到回复(只是成员告诉我他们希望他们能帮忙).如果我收到一个可行的解决方案,我也会在那里发布.

Ble*_*der 17

您正在R环境中运行Jython代码,因此您正在寻找使用Jython语言而不是R发送附件的方法.

由于Jython基本上是Python,因此这里是一种发送带有Python附件的电子邮件的方法:如何使用Python 发送电子邮件附件.

你只需要将这些代码整理到你的代码中.

  • 谢谢你的指导.RI理解得很好,但我不是程序员.直到3天前我才听说过Jython.我没有将2拼接在一起的技巧.任何进一步的帮助将不胜感激. (2认同)

Tyl*_*ker 6

可以在这里找到有效且运行良好的响应:http:
//r.789695.n4.nabble.com/Email-out-of-R-code-td3530671.html

感谢nutterb从rhelp列表中得到答案.感谢所有试图帮助我的人,并对我对蟒蛇的无知感到耐心.


Ite*_*tor 5

选项1:对于sendmailR,您似乎遇到了端口25的附加问题.您应该能够sendmail_options(smtpPort = 587)在使用sendmail()命令之前指定目标端口.

我不确定这会解决您的其他问题,但它应该为您提供正确的端口.


选项2:如果您想调用Python脚本,那么这个脚本看起来最相关.您可能会发现最容易进行令牌替换,即使用基本脚本,放入您将简单找到的字符串(即令牌)和替换(即用您想要的字符串替换),然后执行修订后的脚本.

例如,使用上面链接中的脚本(在本地目录中保存为"sendmail_base.py"):

BasePy  = scan("sendmail_base.py", what = "character", sep = "\n")
OutPy = gsub("your_email@gmail.com", "yourRealEmailAddress", InFile)
OutPy = gsub("your_password", "yourRealPassword", OutFile)
Run Code Online (Sandbox Code Playgroud)

依此类推,将标题,收件人等替换为您要使用的文本字符串,以及附件文件名的规范相同.最后,您可以将输出保存到新的Python文件并执行它:

cat(OutPy, file = "sendmail_new.py", sep = "\n")
system("chmod u+x sendmail_new.py; ./sendmail_new.py")
Run Code Online (Sandbox Code Playgroud)

虽然这是一种非常天真的方法,但它很简单,脚本的调试只涉及检查输出Python程序是否正常工作以及R是否生成正确的输出Python程序.这与调试R通过各种包和语言传递对象的内容形成对比.