Tôi đang cố gắng gửi email từ một ứng dụng C# SharePoint bao gồm các kiểu và tệp đính kèm tùy chỉnh. Nó sử dụng một cấu trúc mẫu và tôi đã định cấu hình thành công email để sử dụng các kiểu và tệp đính kèm mới cho hình ảnh nội dòng và nó hiển thị tốt cho các máy khách Outlook. Tuy nhiên, khi tôi cố gắng xem email trên thiết bị iOS, tôi thấy hình ảnh hai lần; một lần nội tuyến và một lần nữa ở cuối email.Gửi email bằng C# để hiển thị trong iOS
Gần nhất tôi có thể tìm thấy giải pháp đã được viết cho Django và tôi đã không có nhiều thành công khi chuyển giải pháp đó cho C#. Tôi tìm thấy câu trả lời ở đây: Displaying inline images on iPhone, iPad
tôi cấu hình các file đính kèm theo cách này:
System.Net.Mail.Attachment attachment = new System.Net.Mail.Attachment(new MemoryStream(imageBytes.Key), MediaTypeNames.Image.Jpeg);
attachment.Name = imageBytes.Value;
attachment.ContentDisposition.Inline = true;
attachment.ContentId = imageBytes.Value;
attachments.Add(attachment);
Làm thế nào tôi có thể đi về hiển thị những hình ảnh này chỉ một lần? Tôi cần để có thể hiển thị chúng theo cách mà chúng chỉ được hiển thị nội tuyến. Tôi không chắc chắn nếu điều này có nghĩa là tôi nên sử dụng quan điểm thay thế và nếu như vậy, làm thế nào để đi về việc sử dụng chúng.
EDIT:
Dưới đây là phần còn lại của mã mà tôi sử dụng để tạo ra các email:
public override System.Net.Mail.MailMessage GenerateMessage()
{
var keys = new Dictionary<string, string>();
var fileBytes = new Dictionary<byte[], string>();
var attachments = new List<System.Net.Mail.Attachment>();
var message = new MailMessage();
//get the attachment images as html in a dictionary object, byte[] and string
fileBytes = GetEmailAttachments();
foreach (var imageBytes in fileBytes)
{
System.Net.Mail.Attachment attachment = new System.Net.Mail.Attachment(new MemoryStream(imageBytes.Key), MediaTypeNames.Image.Jpeg);
attachment.Name = imageBytes.Value;
attachment.ContentDisposition.Inline = true;
attachment.ContentId = imageBytes.Value;
attachments.Add(attachment);
}
foreach (var attachment in attachments)
{
message.Attachments.Add(attachment);
string fileName = attachment.Name.Split('.')[0];
switch (fileName)
{
case "img-approve":
keys.Add(fileName, String.Format("<a href={0} target=_top><img src='cid:{1}' alt={2} title={3}></a>",
innerMsg, attachment.ContentId, fileName, "test"));
break;
case "img-reject":
keys.Add(fileName, String.Format("<a href={0} target=_top><img src='cid:{1}' alt={2} title={3}></a>",
innerMsg1, attachment.ContentId, fileName, "test"));
break;
case "img-buyer":
keys.Add(fileName, String.Format("<a href={0} target=_top><img src='cid:{1}' height=100 alt=picture></a>", imageURL, attachment.ContentId));
break;
case "img-env":
keys.Add(fileName, String.Format("<img src='cid:{0}' alt={1} style=vertical-aign: middle>", attachment.ContentId, "test"));
break;
case "img-computer":
keys.Add(fileName, String.Format("<img src='cid:{0}' alt={1} style=vertical-aign: middle>", attachment.ContentId, "test"));
break;
case "logo":
keys.Add(fileName, String.Format("<img src='cid:{0}' alt={1} style=vertical-aign: middle>", attachment.ContentId, "test"));
break;
default:
keys.Add(fileName, String.Format("<img src='cid:{0}' alt={1}>", attachment.ContentId, fileName));
break;
}
}
//get the additional keys specific to this email
GenerateAdditionalKeys(keys, message);
//build the email
var body = ReplaceTemplateKeys(keys, _template);
if(!string.IsNullOrEmpty(toEmail))
{
message.To.Add(toEmail);
}
if (!string.IsNullOrEmpty(ccEmail))
{
message.CC.Add(ccEmail);
}
message.IsBodyHtml = true;
message.Body = body;
return message;
}
Có thể hữu ích khi cung cấp phần còn lại của mã được sử dụng để xây dựng MailMessage. – mason
Bạn đã kiểm tra giải pháp này chưa: http://stackoverflow.com/questions/18358534/send-inline-image-in-email? –
Tôi đã xem giải pháp bạn đã liên kết với @Adriano nhưng sử dụng phương pháp đó có vẻ như thêm tệp .bin vào email trong Outlook và không giải quyết được sự cố định dạng trong iOS. – awh112