gpt4 book ai didi

c# - System.Net.Mail.MailMessage电子邮件作为Microsoft Dynamics CRM 2011中传出电子邮件的附件

转载 作者:行者123 更新时间:2023-11-30 18:33:39 33 4
gpt4 key购买 nike

如何将电子邮件作为MSG文件附加到CRM 2011中的外发电子邮件中?

我已经创建了电子邮件的html附件,可以,但是必须在浏览器中查看html附件; Outlook中的预览不显示图像。

我的问题是CRM中的ActivityMimeAttachment实体要求主体为Base64字符串,如果它是html字符串作为附件,则可以:

        // UnicodeEncoding had to be used as there were problems with 
// special char in ASCII
var bodyArray = System.Text.UnicodeEncoding.Unicode.GetBytes(body);
body = System.Convert.ToBase64String(bodyArray);
return body;


如何使用从 System.Net.Mail.MailMessage创建的MSG文件作为附件,或者如何将 System.Net.Mail.MailMessage电子邮件转换为Base64String?

最佳答案

我发现了这个codeproject article

它使用反射通过非公开的MailWriter类型保存它。这种方式很脏,但是除了in this answer描述的官方方式之外

public static class MailMessageExt
{
public static void Save(this MailMessage Message, string FileName)
{
Assembly assembly = typeof(SmtpClient).Assembly;
Type _mailWriterType =
assembly.GetType("System.Net.Mail.MailWriter");

using (FileStream _fileStream =
new FileStream(FileName, FileMode.Create))
{
// Get reflection info for MailWriter contructor
ConstructorInfo _mailWriterContructor =
_mailWriterType.GetConstructor(
BindingFlags.Instance | BindingFlags.NonPublic,
null,
new Type[] { typeof(Stream) },
null);

// Construct MailWriter object with our FileStream
object _mailWriter =
_mailWriterContructor.Invoke(new object[] { _fileStream });

// Get reflection info for Send() method on MailMessage
MethodInfo _sendMethod =
typeof(MailMessage).GetMethod(
"Send",
BindingFlags.Instance | BindingFlags.NonPublic);

// Call method passing in MailWriter
_sendMethod.Invoke(
Message,
BindingFlags.Instance | BindingFlags.NonPublic,
null,
new object[] { _mailWriter, true },
null);

// Finally get reflection info for Close() method on our MailWriter
MethodInfo _closeMethod =
_mailWriter.GetType().GetMethod(
"Close",
BindingFlags.Instance | BindingFlags.NonPublic);

// Call close method
_closeMethod.Invoke(
_mailWriter,
BindingFlags.Instance | BindingFlags.NonPublic,
null,
new object[] { },
null);
}
}
}


然后

MailMessage _testMail = new MailMessage();
_testMail.Body = "This is a test email";
_testMail.To.Add(new MailAddress("email@domain.com"));
_testMail.From = new MailAddress("sender@domain.com");
_testMail.Subject = "Test email";
_testMail.Save(@"c:\testemail.eml");
var bytes = System.IO.File.ReadAllBytes(@"c:\testemail.eml");
var bodyArray = System.Text.UnicodeEncoding.Unicode.GetBytes(bytes);
var body = System.Convert.ToBase64String(bodyArray);

关于c# - System.Net.Mail.MailMessage电子邮件作为Microsoft Dynamics CRM 2011中传出电子邮件的附件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17358662/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com