2017-10-06 11 views
0

J'ai fait une petite application C# WFP qui envoie des e-mails avec des images incorporées en utilisant C# et Outlook Interop. Il semble que de nombreux clients de messagerie réagissent différemment aux e-mails envoyés à partir de cette application par rapport aux e-mails créés manuellement où les images sont collées directement en utilisant CTRL + V.Envoyer un e-mail avec l'image en utilisant C# et Outlook Interop vs copier coller l'image dans l'e-mail

J'ai essayé d'utiliser OutlookSpy pour comparer les deux courriels, mais je ne vois pas de différence qui pourrait expliquer la façon différente dont les courriels sont traités.

Lorsqu'un e-mail envoyé à partir de l'application C# est reçu dans une application Outlook sur un Iphone, les images sont vides. Cela fonctionne très bien lorsque l'image est créée manuellement et que les images sont collées à l'aide de CTRL + V.

1) Comment m'assurer que les courriels envoyés depuis mon application sont traités de la même manière que lorsque je crée manuellement un courriel dans Outlook et que je copie une image en utilisant CTRL + V? Si je peux faire ce travail, alors il devrait être possible de faire afficher les images correctement dans Outlook pour Iphone.

2) Comment Outlook gère-t-il une image lorsqu'elle est collée avec CTRL + V? Il semble qu'il utilise Cid, de la même manière que dans mon application, mais comment fait-il référence à l'image si elle n'est pas attachée?

Voici le code pour l'exemple d'application:

private void SendEmailButton_OnClick(object sender, RoutedEventArgs e) 
    { 
     SendMail(); 
    } 

    public void SendMail() 
    { 
     var application = GetOutlookApplication(); 
     MailItem newMail = (MailItem)application.CreateItem(OlItemType.olMailItem); 
     newMail.To = "!!!EnterValidEmailAddress!!!"; 
     newMail.Subject = "Image test"; 

     //Create image as embedded attachment 
     Attachment attachment1 = newMail.Attachments.Add(@"C:/SomeImage1.png", OlAttachmentType.olByValue); 
     string imageCid1 = "SomeImage_1"; 

     //The property Accessor to be able to refer to the image from Email HTML Body using CID 
     attachment1.PropertyAccessor.SetProperty("http://schemas.microsoft.com/mapi/proptag/0x3712001E", imageCid1); 
     //Set property Accesor to hide attachment 
     attachment1.PropertyAccessor.SetProperty("http://schemas.microsoft.com/mapi/proptag/0x7FFE000B", true); 

     //Refer the attachment using cid 
     newMail.HTMLBody = String.Format("<a href=\"{0}\"><img src=\"cid:{1}\"></a>", "google.dk", imageCid1); 
     newMail.Save(); 
     newMail.Display(); 
    } 

    public static OutlookApplication GetOutlookApplication() 
    { 
     // Start outlook process if it is not startet already 
     if (!IsOutlookRunning()) 
     { 
      using (Process p = new Process()) 
      { 
       p.StartInfo.FileName = "OUTLOOK.EXE"; 
       p.Start(); 

       if (!p.WaitForInputIdle(10000)) 
        Thread.Sleep(5000); 
      } 
     } 

     // Start the outlook application (API) 
     OutlookApplication oApp = null; 
     if (Process.GetProcessesByName("OUTLOOK").Any()) 
     { 
      try 
      { 
       oApp = Marshal.GetActiveObject("Outlook.Application") as OutlookApplication; 

      } 
      catch (System.Exception) 
      { 
       if (oApp == null) 
        oApp = new OutlookApplication(); 
      } 
      return oApp; 
     } 
     oApp = new OutlookApplication(); 
     return oApp; 


    } 

    private static bool IsOutlookRunning() 
    { 
     Process[] p = Process.GetProcessesByName("Outlook"); 
     return p.Length != 0; 
    } 

Répondre

0

Assurez-vous que vous obtenez un balisage HTML bien formé finalement. La ligne de code suivante ajoute simplement la balise <a> à la fin de la chaîne du corps:

newMail.HTMLBody += String.Format("<a href=\"{0}\"><img src=\"cid:{1}\"></a>", "google.dk", imageCid1); 

, vous avez besoin au lieu de trouver un bon endroit pour l'image entre les <body> et </body> tags.

+0

Merci pour la réponse Eugene. C'est un bon point. Malheureusement, cela n'a pas résolu le problème. :( –