Я пытаюсь отправить электронное письмо с вложениями в R через gmail с помощью пакета jython. Я понимаю, что jython - это язык python внутри R, проблема в том, что я не знаю python, поэтому надеюсь, что кто-то, владеющий этим языком, сможет мне помочь.Отправка вложений в R через gmail (с использованием jython)
Почему я использую jython? Поскольку другой почтовый пакет, который кажется популярным на SO - sendmailR, не работает с gmail, поскольку он требует аутентификации.
Исходный код, который я использовал, - here. Как говорит парень по ссылке, исходный код построен для писем без вложений. Я смог полностью запустить эту версию без ошибок (то есть можно отправлять электронные письма без вложений через jython в R).
Однако, когда я попытался добавить скрипт для включения вложений, он не сработал. Это моя попытка форматирования этого кода для обработки вложений (подробность Логина/электронной почты гасится):
rJython <- rJython()
rJython$exec("import smtplib")
rJython$exec("from email.MIMEMultipart import MIMEMultipart")
rJython$exec("from email.MIMEBase import MIMEBase")
rJython$exec("from email.MIMEText import MIMEText")
rJython$exec("import email.utils")
rJython$exec("import smtplib")
rJython$exec("import os")
rJython$exec("from email.Utils import COMMASPACE, formatdate")
rJython$exec("from email import Encoders")
mail<-c(
#Email settings
"fromaddr = '@gmail.com'",
"toaddrs = '@gmail.com'",
"msg = MIMEMultipart('This is the body of the message.')",
"msg['From'] = email.utils.formataddr(('', fromaddr))",
"msg['To'] = email.utils.formataddr(('', toaddrs))",
"msg['Subject'] = 'Monitor'",
#SMTP server credentials
"username = ''",
"password = ''",
#Attach file
"files = 'E:/R/R_Data/output/S.pdf'",
"msg.attach(MIMEText('Your message contents'))",
"for f in files:",
" part = MIMEBase('application', 'octet-stream')",
" part.set_payload(open(f, 'rb').read())",
" Encoders.encode_base64(part)",
" part.add_header('Content-Disposition', 'attachment;
" filename=\"S.pdf\"' % os.path.basename(files))",
" msg.attach(part)",
#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)
Когда я запускаю это, я получаю следующее сообщение об ошибке:
Error in jython.exec(rJython, mail) : [Errno 2] ENOENT: 'E'
Я понимаю, что эта ошибка в Python означает «нет такого файла или каталога».
Вещи, которые я могу делать неправильно: 1. Я неправильно размещаю каталог своих вложений? 2. Не работает ли код, потому что я указываю только один файл в каталоге для прикрепления? 3. Может ли код не обрабатывать .pdfs? 4. Неправильная ли какая-либо другая часть кода?
Детали Версия: платформы x86_64-рс-Mingw32
арка x86_64
ОС mingw32
система x86_64, mingw32
статус
главная 2
незначительные 13,1
год 2011
месяц 07
день 08
svn rev 56322
язык R
version.string R версия 2.13.1 (2011-07-08)
Большое спасибо за вашу помощь. А.
Вы пробовали [пакет gmailR] (https://github.com/trinker/gmailR)? – Dason