从 memoryStream 发送带有附件的 MailKit 电子邮件
Send MailKit email with an attachment from memoryStream
如何使用 MailKit 从 memoryStream 发送带有附件的电子邮件?目前,我使用常规 SMTP 发送并使用以下代码附加文件,但找不到任何合适的示例来使用 MailKit 包发送它。
我已经阅读了这两个文档,但找不到合适的解决方案。
http://www.mimekit.net/docs/html/M_MimeKit_AttachmentCollection_Add_6.htm
using System.Net.Mail;
MemoryStream memoryStream = new MemoryStream(bytes);
message.Attachments.Add(new Attachment(memoryStream, "Receipt.pdf", MediaTypeNames.Application.Pdf));
这是我的 MailKit 电子邮件代码:
#region MailKit
string fromEmail = GlobalVariable.FromEmail;
string fromEmailPwd = "";//add sender password
var email = new MimeKit.MimeMessage();
email.From.Add(new MimeKit.MailboxAddress("Sender", fromEmail));
email.To.Add(new MimeKit.MailboxAddress("receiver", "receiver@gmail.com"));
var emailBody = new MimeKit.BodyBuilder
{
HtmlBody = htmlString
};
email.Subject = "test Booking";
email.Body = emailBody.ToMessageBody();
//bytes is parameter.
//MemoryStream memoryStream = new MemoryStream(bytes);
//message.Attachments.Add(new Attachment(memoryStream, "Receipt.pdf", MediaTypeNames.Application.Pdf));
using (var smtp = new MailKit.Net.Smtp.SmtpClient())
{
smtp.Connect("smtp.gmail.com", 465, true);
smtp.Authenticate(fromEmail, fromEmailPwd);
smtp.Send(email);
smtp.Disconnect(true);
}
#endregion
这是如何完成的:您需要为字符串内容创建一个 TextPart
,为附件创建一个 MimePart
,然后将两者添加到 Multipart
,即 [= MimeMessage
的 14=]
我假设您想发送一个 HTML 字符串 textContent
和一个名称为 filename
的 PDF 文件,该文件已使用任何名为 stream
的流读取。
var multipart = new Multipart("mixed");
var textPart = new TextPart(TextFormat.Html)
{
Text = textContent,
ContentTransferEncoding = ContentEncoding.Base64,
};
multipart.Add(textPart);
stream.Position = 0; // you MUST reset stream position
var attachmentPart = new MimePart(MediaTypeNames.Application.Pdf)
{
Content = new MimeContent(stream),
ContentId = filename,
ContentTransferEncoding = ContentEncoding.Base64,
FileName = filename
};
multipart.Add(attachmentPart);
mimeMessage.Body = multipart;
请注意,对于 contentType
,我使用了来自 DLL System.Net.Mail
和命名空间 System.Net.Mime
的 MediaTypeNames.Application.Pdf
,它等于字符串 "application/pdf"
。您可以改用您喜欢的任何其他库,或编写您自己的库。
如果你想坚持使用 MimeKit 的 BodyBuilder 来构建你的消息正文,你可以这样做:
var emailBody = new MimeKit.BodyBuilder
{
HtmlBody = htmlString
};
emailBody.Attachments.Add ("Receipt.pdf", bytes);
// If you find that MimeKit does not properly auto-detect the mime-type based on the
// filename, you can specify a mime-type like this:
//emailBody.Attachments.Add ("Receipt.pdf", bytes, ContentType.Parse (MediaTypeNames.Application.Pdf));
message.Body = emailBody.ToMessageBody ();
如何使用 MailKit 从 memoryStream 发送带有附件的电子邮件?目前,我使用常规 SMTP 发送并使用以下代码附加文件,但找不到任何合适的示例来使用 MailKit 包发送它。 我已经阅读了这两个文档,但找不到合适的解决方案。 http://www.mimekit.net/docs/html/M_MimeKit_AttachmentCollection_Add_6.htm
using System.Net.Mail;
MemoryStream memoryStream = new MemoryStream(bytes);
message.Attachments.Add(new Attachment(memoryStream, "Receipt.pdf", MediaTypeNames.Application.Pdf));
这是我的 MailKit 电子邮件代码:
#region MailKit
string fromEmail = GlobalVariable.FromEmail;
string fromEmailPwd = "";//add sender password
var email = new MimeKit.MimeMessage();
email.From.Add(new MimeKit.MailboxAddress("Sender", fromEmail));
email.To.Add(new MimeKit.MailboxAddress("receiver", "receiver@gmail.com"));
var emailBody = new MimeKit.BodyBuilder
{
HtmlBody = htmlString
};
email.Subject = "test Booking";
email.Body = emailBody.ToMessageBody();
//bytes is parameter.
//MemoryStream memoryStream = new MemoryStream(bytes);
//message.Attachments.Add(new Attachment(memoryStream, "Receipt.pdf", MediaTypeNames.Application.Pdf));
using (var smtp = new MailKit.Net.Smtp.SmtpClient())
{
smtp.Connect("smtp.gmail.com", 465, true);
smtp.Authenticate(fromEmail, fromEmailPwd);
smtp.Send(email);
smtp.Disconnect(true);
}
#endregion
这是如何完成的:您需要为字符串内容创建一个 TextPart
,为附件创建一个 MimePart
,然后将两者添加到 Multipart
,即 [= MimeMessage
我假设您想发送一个 HTML 字符串 textContent
和一个名称为 filename
的 PDF 文件,该文件已使用任何名为 stream
的流读取。
var multipart = new Multipart("mixed");
var textPart = new TextPart(TextFormat.Html)
{
Text = textContent,
ContentTransferEncoding = ContentEncoding.Base64,
};
multipart.Add(textPart);
stream.Position = 0; // you MUST reset stream position
var attachmentPart = new MimePart(MediaTypeNames.Application.Pdf)
{
Content = new MimeContent(stream),
ContentId = filename,
ContentTransferEncoding = ContentEncoding.Base64,
FileName = filename
};
multipart.Add(attachmentPart);
mimeMessage.Body = multipart;
请注意,对于 contentType
,我使用了来自 DLL System.Net.Mail
和命名空间 System.Net.Mime
的 MediaTypeNames.Application.Pdf
,它等于字符串 "application/pdf"
。您可以改用您喜欢的任何其他库,或编写您自己的库。
如果你想坚持使用 MimeKit 的 BodyBuilder 来构建你的消息正文,你可以这样做:
var emailBody = new MimeKit.BodyBuilder
{
HtmlBody = htmlString
};
emailBody.Attachments.Add ("Receipt.pdf", bytes);
// If you find that MimeKit does not properly auto-detect the mime-type based on the
// filename, you can specify a mime-type like this:
//emailBody.Attachments.Add ("Receipt.pdf", bytes, ContentType.Parse (MediaTypeNames.Application.Pdf));
message.Body = emailBody.ToMessageBody ();