66 votes

Comment créer un corps multiligne en C# System.Net.Mail.MailMessage

Si vous créez la propriété body comme

System.Net.Mail.MailMessage message = new System.Net.Mail.MailMessage();

message.Body ="First Line \n second line";

J'ai aussi essayé

message.Body ="First Line" + system.environment + "second line";

Les deux ont été ignorés lorsque j'ai reçu le message (en utilisant outlook).

Avez-vous une idée de la façon d'obtenir plusieurs lignes ? J'essaie d'éviter l'encodage html afin que l'e-mail soit plus agréable à lire pour les filtres anti-spam.

merci

0voto

Gilberto Points 59

Aujourd'hui, j'ai trouvé le même problème sur une application de rapport d'erreurs. Je ne veux pas recourir au HTML, pour permettre à outlook d'afficher les messages que j'ai dû faire (en supposant StringBuilder sb) :

sb.Append(" \r\n\r\n").Append("Exception Time:" + DateTime.UtcNow.ToString());

0voto

DDuffy Points 394

Je réalise que cette question a peut-être déjà été traitée auparavant. Cependant, j'ai eu ce problème ce matin avec Environment.Newline n'est pas conservé dans le corps du message. Ce qui suit est une version complète (Now Working with Environment.NewLine étant préservée) que j'utilise pour envoyer un courriel par le biais de mon programme. Modules.MessageUpdate la partie peut être sautée car cela écrit juste dans un fichier journal que j'ai). Ceci est situé sur la page principale de mon programme WinForms.

    private void MasterMail(string MailContents)
    {
        Modules.MessageUpdate(this, ObjApp, EH, 3, 25, "", "", "", 0, 0, 0, 0, "Master Email - MasterMail Called.", "N", MainTxtDict, MessageResourcesTxtDict);

        Outlook.Application OApp = new Outlook.Application();
        //Location of email template to use. Outlook wont include my Signature through this automation so template contains only that.
        string Temp = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + ResourceDetails.DictionaryResources("SigTempEmail", MainTxtDict);

        Outlook.Folder folder = OApp.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderDrafts) as Outlook.Folder;

        //create the email object.
        Outlook.MailItem TestEmail = OApp.CreateItemFromTemplate(Temp, folder) as Outlook.MailItem;

        //Set subject line.
        TestEmail.Subject = "Automation Results";

        //Create Recipients object.
        Outlook.Recipients oRecips = (Outlook.Recipients)TestEmail.Recipients;

        //Set and check email addresses to send to.
        Outlook.Recipient oRecip = (Outlook.Recipient)oRecips.Add("EmailAddressToSendTo");
        oRecip.Resolve();

        //Set the body of the email. (.HTMLBody for HTML Emails. .Body will preserve "Environment.NewLine")
        TestEmail.Body = MailContents + TestEmail.Body;
        try
        {
            //If outlook is not open, Open it.
            Process[] pName = Process.GetProcessesByName("OUTLOOK.EXE");
            if (pName.Length == 0)
            {
                System.Diagnostics.Process.Start(@"C:\Program Files\Microsoft Office\root\Office16\OUTLOOK.EXE");
            }

            //Send email
            TestEmail.Send();

            //Update logfile - Success.
            Modules.MessageUpdate(this, ObjApp, EH, 1, 17, "", "", "", 0, 0, 0, 0, "Master Email sent.", "Y", MainTxtDict, MessageResourcesTxtDict);
        }
        catch (Exception E)
        {
            //Update LogFile - Fail.
            Modules.MessageUpdate(this, ObjApp, EH, 5, 4, "", "", "", 0, 0, 0, 0, "Master Email - Error Occurred. System says: " + E.Message, "Y", MainTxtDict, MessageResourcesTxtDict);
        }
        finally
        {
            if (OApp != null)
            {
                OApp = null;
            }
            if (folder != null)
            {
                folder = null;
            }
            if (TestEmail != null)
            {
                TestEmail = null;
            }
            GC.Collect();
            GC.WaitForPendingFinalizers();
        }
    }

Vous pouvez ajouter plusieurs destinataires en insérant manuellement un " ;" entre les adresses électroniques, ou en utilisant l'une de mes autres méthodes qui consiste à remplir un dictionnaire à partir d'un fichier Txt et à l'utiliser pour créer les adresses électroniques des destinataires à l'aide de l'extrait suivant.

        foreach (KeyValuePair<string, string> kvp in EmailDict)
        {
            Outlook.Recipient oRecip = (Outlook.Recipient)oRecips.Add(kvp.Value);
            RecipientList += string.Format("{0}; ", kvp.Value);
            oRecip.Resolve();
        }

J'espère qu'au moins une partie de ceci aidera quelqu'un.

0voto

Bob Points 1

Ajout de . avant \r\n le fait fonctionner si la chaîne originale avant \r\n n'a pas .

D'autres personnages peuvent fonctionner. Je n'ai pas essayé.

Avec ou sans les trois lignes incluant IsBodyHtml, peu importe.

-1voto

PoopaSaurasRex Points 35

Ce qui a fonctionné pour moi, c'est de simplement séparer les données avec un :

message.Body = FirstLine + ":" + SecondLine;

J'espère que cela vous aidera

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X