Próbuję wysłać wiadomość e-mail z aplikacji C# SharePoint, która zawiera niestandardowe style i załączniki. Korzysta ze struktury szablonu i pomyślnie skonfigurowałem wiadomość e-mail, aby używać nowych stylów i załączników do obrazów wstawianych, i wyświetla się dobrze dla klientów programu Outlook. Jednak gdy próbuję wyświetlić wiadomość e-mail na urządzeniu z systemem iOS, widzę obrazy dwukrotnie; raz inline i jeszcze raz na końcu e-maila.Wysyłanie wiadomości e-mail z C# do wyświetlania w systemie iOS
Najbliższe rozwiązanie, jakie udało mi się znaleźć, zostało napisane dla Django i nie udało mi się sprowadzić tego rozwiązania do C#. I okazało się, że odpowiedź tutaj: Displaying inline images on iPhone, iPad
skonfigurować załączniki w ten sposób:
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);
Jak mogę iść o wyświetlaniu tych zdjęć tylko raz? Muszę móc wyświetlać je w taki sposób, aby były wyświetlane tylko w linii. Nie jestem pewien, czy to oznacza, że powinienem korzystać z alternatywnych poglądów, a jeśli tak, to jak z nich korzystać.
EDIT:
Oto Pozostała część kodu, który używam do generowania e-maili:
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;
}
To może być pomocne, aby zapewnić resztę kod używany do zbudowania MailMessage. – mason
Czy sprawdziłeś to rozwiązanie: http://stackoverflow.com/questions/18358534/send-inline-image-inemail? –
Przyjrzałem się rozwiązaniu powiązanemu z @Adriano, ale używając tej metody, wydaje się, że dodaje pliki .bin do wiadomości e-mail w programie Outlook i nie rozwiązuje problemów formatowania w systemie iOS. – awh112