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

75voto

Grant Thomas Points 28280

Conformément au commentaire de drris, si IsBodyHtml est définie à true, alors une nouvelle ligne standard pourrait potentiellement être ignorée par la conception. Je sais que vous avez mentionné que vous évitez le HTML mais essayez d'utiliser <br /> au lieu de cela, même si c'est juste pour voir si cela "résout" le problème - vous pouvez alors exclure le problème grâce à ce que vous savez :

var message = new System.Net.Mail.MailMessage();
message.Body = "First Line <br /> second line";

Vous pouvez également essayer de définir IsBodyHtml a false et déterminer si les nouvelles lignes fonctionnent dans ce cas, bien que, à moins que vous ne le définissiez sur true explicitement, je suis presque sûr qu'il s'agit par défaut de false de toute façon.

Par ailleurs, éviter le HTML dans les courriers électroniques n'aide pas nécessairement à faire passer le message à travers les filtres anti-spam, AFAIK - en fait, le mieux que vous puissiez faire est de garantir la compatibilité entre les clients de messagerie en termes de mise en page. Pour "jouer gentiment" avec les filtres anti-spam, un certain nombre d'autres éléments doivent être pris en compte, notamment l'objet et le contenu du courrier, l'expéditeur et le destinataire du courrier, la correspondance entre les deux, etc. Un courriel ne sera tout simplement pas discriminé. parce que il est balisé avec du HTML.

27voto

Mikael Puusaari Points 572

Si vous n'avez pas besoin du corps du message en html, désactivez-le :

message.IsBodyHtml = false;

puis utiliser par exemple

message.Body = "First line" + Environment.NewLine + 
               "Second line";

mais si vous avez besoin de l'avoir en html pour une raison quelconque, utilisez la balise html :

message.Body = "First line <br /> Second line";

17voto

Ron Thacker Points 161

En commençant chaque nouvelle ligne par deux espaces blancs, vous éviterez la suppression automatique perpétrée par Outlook.

var lineString = "  line 1\r\n";
linestring += "  line 2";

S'affichera correctement :

line 1
line 2

Il est un peu maladroit à utiliser, mais il fait le travail sans que l'on ait à fournir beaucoup d'efforts supplémentaires.

5voto

Justin Denton Points 531

Je préfère généralement utiliser un StringBuilder lorsque je travaille avec MailMessage. L'ajout de nouvelles lignes est facile (via la méthode AppendLine), et vous pouvez simplement définir le corps du message comme étant égal à StringBuilder.ToString() (... pour l'instance de StringBuilder).

StringBuilder result = new StringBuilder("my content here...");
result.AppendLine(); // break line

5voto

levinjay Points 69

Vous devez activer IsBodyHTML

message.IsBodyHtml = true; //This will enable using HTML elements in email body
message.Body ="First Line <br /> second line";

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