我知道这是一个老问题,但我最近不得不实现这个,所以这就是我所做的。这是一个浅层克隆,尽管需要做更多的工作,它可以变成一个深层克隆。
private MailMessage MailMessageShallowCopy(MailMessage original)
{
string to = original.To.ToString();
string from = original.From.ToString();
string subject = original.Subject;
string body = original.Body;
string cc = original.CC.ToString();
string bcc = original.Bcc.ToString();
MailMessage clone = new MailMessage(from, to, subject, body);
if (!string.IsNullOrEmpty(cc))
{
clone.CC.Add(cc);
}
if (!string.IsNullOrEmpty(bcc))
{
clone.Bcc.Add(bcc);
}
foreach (AlternateView view in original.AlternateViews)
{
var clonedView = new AlternateView(view.ContentStream);
foreach (var resource in view.LinkedResources)
{
clonedView.LinkedResources.Add(resource);
}
clone.AlternateViews.Add(clonedView);
}
foreach (Attachment attachment in original.Attachments)
{
clone.Attachments.Add(attachment);
}
clone.BodyEncoding = original.BodyEncoding;
clone.DeliveryNotificationOptions = original.DeliveryNotificationOptions;
foreach (NameValueCollection header in original.Headers)
{
clone.Headers.Add(header);
}
clone.HeadersEncoding = original.HeadersEncoding;
clone.IsBodyHtml = original.IsBodyHtml;
clone.Priority = original.Priority;
foreach (MailAddress mailAddress in original.ReplyToList)
{
clone.ReplyToList.Add(mailAddress);
}
clone.Sender = original.Sender;
clone.SubjectEncoding = original.SubjectEncoding;
return clone;
}