Thanks for posting this. If anyone is interested in a short extension to include an attachment, try the function below.
I make no guarantees though. Also, note that winDialog() is used in a couple places, so it may need some therapy before working outside of Windows. 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" = "re...@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") } -- View this message in context: http://r.789695.n4.nabble.com/Email-out-of-R-code-tp3530671p3948061.html Sent from the R help mailing list archive at Nabble.com. ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.