سؤال

بعد الإرشادات المقدمة في هذه سؤال ذي صلة ، تمكنت من إرسال رسائل بريد مكونة من HTML. الآن السؤال هو: كيف يمكنني تعديل الكود التالي ، من أجل إرفاق ملف واحد أو أكثر (من أي نوع) إلى هذه الرسالة؟

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")))
هل كانت مفيدة؟

المحلول

مع حزمة MailR (https://github.com/rpremraj/mailr) ، يمكنك إرسال رسائل البريد الإلكتروني HTML وإرفاق الملفات بالإضافة إلى سهولة أدناه:

send.mail(from = "sender@gmail.com",
          to = c("recipient1@gmail.com", "recipient2@gmail.com"),
          subject = "Subject of the email",
          body = "<html>The apache logo - <img src=\"http://www.apache.org/images/asf_logo_wide.gif\"></html>",
          html = TRUE,
          smtp = list(host.name = "smtp.gmail.com", port = 465, user.name = "gmail_username", passwd = "password", ssl = TRUE),
          attach.files = c("./download.log", "upload.log"),
          authenticate = TRUE,
          send = TRUE)

تحرير (2014-05-13):

تم تحديث MailR للسماح بتشفيرات أحرف مختلفة. فيما يلي مثال لإرسال الرسالة باسم UTF-8.

send.mail(from = "Sender Name <sender@gmail.com>",
          to = "recipient@gmail.com",
          subject = "A quote from Gandhi",
          body = "In Hindi :  थोडा सा अभ्यास बहुत सारे उपदेशों से बेहतर है।
                  English translation: An ounce of practice is worth more than tons of preaching.",
          encoding = "utf-8",
          smtp = list(host.name = "smtp.gmail.com", port = 465, user.name = "gmail_username", passwd = "password", ssl = T),
          authenticate = TRUE,
          send = TRUE)

نصائح أخرى

وظيفة (بالنسبة لي على الأقل):

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);
}

يمكن استخدام مثل هذا:

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 هنا.

لاحظ أن الإصدارات الحالية من sendmailR دعم المرفقات خارج الصندوق عن طريق صنع msg قائمة mime_type الكائنات ، أي أنك الآن

sendmail( from,to,subject,
          msg=list(mime_part("Here's an attachment for you!"), 
          mime_part(attachmentFileName)), control, headers)`

أود أن أتخلى عن استخدام R لهذا الغرض. تعمل حلول مستقرة ، تعمل ، منصة منصة ، للقيام بذلك في Python ، ويمكنك استدعاء Python من R.

إذا اضطررت إلى وضع نموذج للتأثيرات المختلطة في برنامج Python ، فسأتصل بـ R للقيام بذلك - إذا أردت القيام بمهمة أنظمة مثل إرسال بريد إلكتروني في R ، سأتصل بيثون للقيام بذلك. يستحق التعلم إذا كنت لا تعرف ذلك بعد.

فيما يلي مثال على الإعداد لمهمة دفعة يومية مثل الإعداد باستخدام SendMail () في R (متوفر مع الحزمة SendMailr) مع مرفقات متعددة (CSV واحد ، PDF واحد):

إعداد معلومات التاريخ للإشارة في أسماء الملفات:

> 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 () في نهاية هذا المنشور:

> 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"                     

حدد خادم البريد هنا:

> mailControl=list(smtpServer="mail.whateveryourmailserveris.com")

تحديد المرفق 1 المسار والاسم:

> 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 كائن:

> attachmentObject1 <- mime_part(x=attachmentPath1,name=attachmentName1)

تحديد المرفق 2 المسار والاسم:

> 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 كائن:

> attachmentObject2 <- mime_part(x=attachmentPath2,name=attachmentName2)

اجمع الآن بين جسم البريد الإلكتروني مع مرفقاتك:

> 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 ():

> sendmail(from=from, to=to, subject=subject, msg=bodyWithAttachment, control=mailControl)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top