首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >sendmailR (Part2):将文件作为邮件附件发送

sendmailR (Part2):将文件作为邮件附件发送
EN

Stack Overflow用户
提问于 2010-08-26 14:39:59
回答 4查看 14.7K关注 0票数 22

按照this相关问题中提供的说明,我能够发送html格式的邮件消息。现在的问题是:我应该如何修改下面的代码,以便将一个或多个文件(任何类型)附加到此消息?

代码语言:javascript
复制
library(sendmailR)

from <- "<sendmailR@myserver.mycompany.com>"
to <- c("<someone@mycompany.com>","<anotherone@mycompany.com>")
subject <- iconv("Message Title", to = "utf8")

msg <- "<hr size='2' width='33%' style='text-align: left;'><font size='2'>
  <i>This email was sent automatically using <a href='http://finzi.psych.upenn.edu/R/library/sendmailR/html/00Index.html' rel='nofollow' target='_blank'>sendmailR</a>.<br>
  Please do not reply directly to this e-mail.</i></font>"

msg <- iconv(msg, to = "utf8")

sapply(to,function(x) sendmail(from, x, subject, msg, control=list(smtpServer="###.###.###.###"), headers=list("Content-Type"="text/html; charset=UTF-8; format=flowed")))
EN

回答 4

Stack Overflow用户

发布于 2010-08-26 16:31:54

一个有效的(至少对我而言)函数:

代码语言:javascript
复制
sendMessage<-function(contents,subject,from,to,attMIME,attachment,control){    
   msg<-list(contents,sendmailR:::.file_attachment(attachment,attachment,attMIME));
   sendmail(from=from,to=to,subject=subject,msg=msg,control=control);
}

可以像这样使用:

代码语言:javascript
复制
png('a.png');hist(rnorm(700));dev.off()
sendMessage('Here you have a nice histogram:',
'Nice picture',
'from@example.com',
'to@example.com',
'image/png',
'a.png',list(smtpServer="..."))

需要注意的是,这个示例发送的消息可能会被标记为垃圾邮件,因为它是一个短文本和一个大图--但是对于较大的消息和pdf附件,它应该通过。如果没有,您可以考虑添加消息的文本版本。

编辑(现在不太相关):关于如何制作MIME消息的最深入的见解可以在here中找到。

票数 8
EN

Stack Overflow用户

发布于 2013-01-17 17:43:19

请注意,当前版本的sendmailR通过使msg成为mime_type对象的列表来支持开箱即用的附件,例如,您现在

代码语言:javascript
复制
sendmail( from,to,subject,
          msg=list(mime_part("Here's an attachment for you!"), 
          mime_part(attachmentFileName)), control, headers)`
票数 6
EN

Stack Overflow用户

发布于 2017-03-31 02:30:28

下面是一个为日常批处理作业设置的示例,比如使用R中的sendmail()设置(随sendmailR包提供)以及多个附件(一个CSV,一个PDF):

设置要在文件名中引用的日期信息:

代码语言:javascript
复制
> yesterday_date_stuff  <- new.env()
> yesterday_date_stuff[['month']] <- strftime(Sys.Date()-1, format="%m")
> yesterday_date_stuff[['day']] <- strftime(Sys.Date()-1, format="%d")
> yesterday_date_stuff[['year']] <- strftime(Sys.Date()-1, format="%y")
> yesterday_date_stuff$month
[1] "03"
> yesterday_date_stuff$day
[1] "29"
> yesterday_date_stuff$year
[1] "17"

现在在本文的末尾为sendmail()函数创建一些所需的信息:

代码语言:javascript
复制
> from <- "youremail@whateveryourmailserveris.com"
> to <- c("person_A_to_send_email_to@whatever.com", "person_B_to_send_email_to@whatever.com", "person_C_to_send_email_to@whatever.com")
> subject <- paste("whatever you want subject line to read for batch job analyzing data for ", yesterday_date_stuff$month, "/", yesterday_date_stuff$day, "/", yesterday_date_stuff$year, sep="")
> body <- "Text to insert into the body of your email"                     

在此处指定邮件服务器:

代码语言:javascript
复制
> mailControl=list(smtpServer="mail.whateveryourmailserveris.com")

定义附件1路径和名称:

代码语言:javascript
复制
> attachmentPath1 <- paste("file1name", "_", yesterday_date_stuff$month, yesterday_date_stuff$day, yesterday_date_stuff$year, ".csv", sep="")
> attachmentName1 <- paste("file1name", "_", yesterday_date_stuff$month, yesterday_date_stuff$day, yesterday_date_stuff$year, ".csv", sep="")

定义附件1对象:

代码语言:javascript
复制
> attachmentObject1 <- mime_part(x=attachmentPath1,name=attachmentName1)

定义附件2路径和名称:

代码语言:javascript
复制
> attachmentPath2 <- paste("file2name", "_", yesterday_date_stuff$month, yesterday_date_stuff$day, yesterday_date_stuff$year, ".pdf", sep="")
> attachmentName2 <- paste("file2name", "_", yesterday_date_stuff$month, yesterday_date_stuff$day, yesterday_date_stuff$year, ".pdf", sep="")

定义附件2对象:

代码语言:javascript
复制
> attachmentObject2 <- mime_part(x=attachmentPath2,name=attachmentName2)

现在,将电子邮件正文与您的附件结合起来:

代码语言:javascript
复制
> bodyWithAttachment <- list(body,attachmentObject1, attachmentObject2)
> bodyWithAttachment
[[1]]
[1] "Text to insert into the body of your email"

[[2]]
<environment: 0x000000004efff188>
attr(,"class")
[1] "mime_part"

[[3]]
<environment: 0x00000000407a1b68>
attr(,"class")
[1] "mime_part"

使用sendmail()函数发送电子邮件:

代码语言:javascript
复制
> sendmail(from=from, to=to, subject=subject, msg=bodyWithAttachment, control=mailControl)
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3572607

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档