Laden...

Mailprogramm mit Sonderzeichenfehler

Erstellt von BlacksGood vor 3 Jahren Letzter Beitrag vor 3 Jahren 263 Views
B
BlacksGood Themenstarter:in
1 Beiträge seit 2021
vor 3 Jahren
Mailprogramm mit Sonderzeichenfehler

Moin Moin,

eins kurz vor weg. Ich hab wenig Ahnung von der PRogrammierung mit C# und frage im Prinzip für eine Kollegin.

Wir haben ein kleines Programm geschrieben, welches Mails versendet. Das Ganze funktioniert auch ohne Probleme.
Das einzige was einfach nicht gehen möchte, ist die richtige Kodierung, aber das nur, wenn der Empfänger gmx.de oder web.de ist.

Als Beispiel wird bei web.de/gmx.de aus dem Text „ Test öäüß „ --> „ Test öäüß “.

Sobald der Empfänger jedoch Outlook oder zB. Freenet benutzt, ist alles in Ordnung.

Hat irgendjmd. eine Ahnung, was wir von unserer Seite tun können, damit auch die Mails bei web.de/gmx.de richtig dargestellt werden?

Hier noch der Code des Programmteils, der für die Maileinstellungen verantwortlich ist:


using System;
using System.ComponentModel;
using System.Net;
using System.Net.Mail;

namespace Test_Mail_EmailProcessor
{
   

    public class EmailProcessor
    {

        private MailMessage _message;

        private SmtpClient _smtpClient;

       

        public void SendEmail(object userToken, MailAddress from, MailAddress[] to, MailAddress[] cc, MailAddress[] bcc, string subject, string body, MailPriority priority, Attachment[] attachments)
        {
            var smtpHost = "smtp.server.de";
            var enableSsl = true;
            var smtpPort = 587;
            var smtpUsername = "user@server.de";
            var smtpPassword = "PASSWORT";

            if (string.IsNullOrEmpty(smtpHost) || null == enableSsl || string.IsNullOrEmpty(smtpPort.ToString()))
            {
                throw new ApplicationException(@"SendEmail: Failed intitializing the ""Smtp Host"" and/or ""Smtp Port"" and/or ""Enable Ssl"" parameters from the settings!");
            }

            _message = new MailMessage
            {
                From = from,
                Sender = from,
                Priority = priority,
                Subject = subject,
                Body = body,
                BodyEncoding = System.Text.Encoding.UTF8,
                SubjectEncoding = System.Text.Encoding.UTF8,
                HeadersEncoding = System.Text.Encoding.UTF8,
                IsBodyHtml = false
            };
            foreach (var recipient in to)
            {
                _message.To.Add(recipient);
            }
            foreach (var recipient in cc)
            {
                _message.CC.Add(recipient);
            }
            foreach (var recipient in bcc)
            {
                _message.Bcc.Add(recipient);
            }
            if (attachments != null)
            {
                foreach (var attachment in attachments)
                {
                    _message.Attachments.Add(attachment);
                }
            }

            

            if (!string.IsNullOrEmpty(smtpUsername) && !string.IsNullOrEmpty(smtpPassword))
            {
                _smtpClient = new SmtpClient()
                {
                    Host = smtpHost,
                    Port = (int) smtpPort,
                    DeliveryMethod = SmtpDeliveryMethod.Network,
                    UseDefaultCredentials = false,
                    Credentials = new NetworkCredential(smtpUsername, smtpPassword),
                    EnableSsl = (bool) enableSsl
                };
            }
            else
            {
                _smtpClient = new SmtpClient()
                {
                    Host = smtpHost,
                    Port = (int) smtpPort,
                    UseDefaultCredentials = true,
                    EnableSsl = (bool) enableSsl
                };
            }

            _smtpClient.SendCompleted += SendCompletedCallback;
            _smtpClient.Send(_message.From.ToString(),_message.To.ToString(),_message.Subject,_message.Body);


        }

        public Action<object, Exception> OnSendCompleted { get; set; }

        void SendCompletedCallback(object sender, AsyncCompletedEventArgs e)
        {
            if (_smtpClient != null)
            {
                _smtpClient.Dispose();    
            }
            if (_message != null)
            {
                _message.Dispose();
            }

            if (OnSendCompleted != null)
            {
                OnSendCompleted(e.UserState, e.Error);
            }
        }
    }
}

Vielen Dank im Voraus und liebe Grüße

16.834 Beiträge seit 2008
vor 3 Jahren
  1. Bitte Code Tags verwenden. Niemand hat bock plaintext Code zu lesen, siehe [Hinweis] Wie poste ich richtig?. Bitte editier Deinen Beitrag.
  2. Mit Code Review hat das Thema nichts zutun; ich habs in den richtigen Forenbereich verschoben
  3. System.Net.Mail soll man schon lange nicht mehr verwenden; steht auch ein dicker fetter Hinweis in den Docs.

SmtpClient Class (System.Net.Mail)

We don't recommend that you use the SmtpClient class for new development because SmtpClient doesn't support many modern protocols. Use MailKit or other libraries instead. For more information, see SmtpClient shouldn't be used on GitHub.

Alternativen: https://github.com/jstedfast/MimeKit zusammen mit https://github.com/jstedfast/MailKit

T
2.224 Beiträge seit 2008
vor 3 Jahren

Es gibt sonst noch BodyTransferEncoding, was ihr nicht gesetz habt.
Ggf. fehlt das noch, ansonsten gilt Abts Hinweis.
Für eine komplette Neuentwicklung würde ich auch von dem SmtpClient abraten.

MailMessage.BodyTransferEncoding Property (System.Net.Mail)

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.