Как я могу отправлять электронные письма через SSL SMTP с .NET Framework?

Есть ли способ с помощью .NET Framework отправлять электронные письма через SMTP-сервер SSL на порт 465?

Обычный способ:

System.Net.Mail.SmtpClient _SmtpServer = new System.Net.Mail.SmtpClient("tempurl.org");
_SmtpServer.Port = 465;
_SmtpServer.EnableSsl = true;
_SmtpServer.Credentials = new System.Net.NetworkCredential("username", "password");
_SmtpServer.Timeout = 5000;
_SmtpServer.UseDefaultCredentials = false;

MailMessage mail = new MailMessage();
mail.From = new MailAddress(from);
mail.To.Add(to);
mail.CC.Add(cc);
mail.Subject = subject;
mail.Body = content;
mail.IsBodyHtml = useHtml;
_SmtpServer.Send(mail);

время вышло:

System.Net Verbose: 0 : [1024] SmtpClient::.ctor(host=ssl0.ovh.net, port=465)
System.Net Information: 0 : [1024] Associating SmtpClient#64923656 with SmtpTransport#44624228
System.Net Verbose: 0 : [1024] Exiting SmtpClient::.ctor()  -> SmtpClient#64923656
System.Net Information: 0 : [1024] Associating MailMessage#17654054 with Message#52727599
System.Net Verbose: 0 : [1024] SmtpClient#64923656::Send(MailMessage#17654054)
System.Net Information: 0 : [1024] SmtpClient#64923656::Send(DeliveryMethod=Network)
System.Net Information: 0 : [1024] Associating SmtpClient#64923656 with MailMessage#17654054
System.Net Information: 0 : [1024] Associating SmtpTransport#44624228 with SmtpConnection#14347911
System.Net Information: 0 : [1024] Associating SmtpConnection#14347911 with ServicePoint#51393439
System.Net.Sockets Verbose: 0 : [1024] Socket#26756241::Socket(InterNetwork#2)
System.Net.Sockets Verbose: 0 : [1024] Exiting Socket#26756241::Socket() 
System.Net.Sockets Verbose: 0 : [1024] Socket#23264094::Socket(InterNetworkV6#23)
System.Net.Sockets Verbose: 0 : [1024] Exiting Socket#23264094::Socket() 
System.Net.Sockets Verbose: 0 : [1024] Socket#26756241::Connect(20:465#337754884)
System.Net.Sockets Verbose: 0 : [1024] Exiting Socket#26756241::Connect() 
System.Net.Sockets Verbose: 0 : [1024] Socket#23264094::Close()
System.Net.Sockets Verbose: 0 : [1024] Socket#23264094::Dispose()
System.Net.Sockets Verbose: 0 : [1024] Exiting Socket#23264094::Close() 
System.Net Information: 0 : [1024] Associating SmtpConnection#14347911 with SmtpPooledStream#14303791
System.Net.Sockets Verbose: 0 : [1024] Socket#26756241::Receive()
System.Net.Sockets Verbose: 0 : [2404] Socket#26756241::Dispose()
System.Net.Sockets Error: 0 : [1024] Exception in the Socket#26756241::Receive - A blocking operation was interrupted by a call to WSACancelBlockingCall
System.Net.Sockets Verbose: 0 : [1024] Exiting Socket#26756241::Receive()   -> 0#0
System.Net Error: 0 : [1024] Exception in the SmtpClient#64923656::Send - Unable to read data from the transport connection: A blocking operation was interrupted by a call to WSACancelBlockingCall.
System.Net Error: 0 : [1024]    at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
   at System.Net.DelegatedStream.Read(Byte[] buffer, Int32 offset, Int32 count)
   at System.Net.BufferedReadStream.Read(Byte[] buffer, Int32 offset, Int32 count)
   at System.Net.Mail.SmtpReplyReaderFactory.ReadLines(SmtpReplyReader caller, Boolean oneLine)
   at System.Net.Mail.SmtpReplyReaderFactory.ReadLine(SmtpReplyReader caller)
   at System.Net.Mail.SmtpConnection.GetConnection(String host, Int32 port)
   at System.Net.Mail.SmtpTransport.GetConnection(String host, Int32 port)
   at System.Net.Mail.SmtpClient.GetConnection()
   at System.Net.Mail.SmtpClient.Send(MailMessage message)
System.Net Verbose: 0 : [1024] Exiting SmtpClient#64923656::Send() 
System.Net Information: 0 : [1024] Associating MailMessage#49584532 with Message#19699911

Я поискал в Google и обнаружил, что System.Net.Mail поддерживает соединения через порт 587 (порт по умолчанию для явного SSL, который запускается незашифрованным, затем выдает STARTDLS, затем переключается на зашифрованное соединение: RFC 2228), но не поддерживает неявный SSL (полное соединение завернут в слой SSL) ...


person Idriss    schedule 18.06.2009    source источник
comment
Свойство SmtpClient.EnableSsl Альтернативное Метод подключения - это когда сеанс SSL устанавливается заранее, до отправки каких-либо протокольных команд. Этот метод подключения иногда называется SMTP / SSL, SMTP через SSL или SMTPS и по умолчанию использует порт 465. Этот альтернативный метод подключения с использованием SSL в настоящее время не поддерживается. FWIW   -  person gerryLowry    schedule 04.12.2011


Ответы (12)


Вот пример отправки электронной почты через GMail, который также использует SSL / 465. Незначительная настройка приведенного ниже кода должна сработать!

using System.Web.Mail;
using System;
public class MailSender
{
    public static bool SendEmail(
        string pGmailEmail, 
        string pGmailPassword, 
        string pTo, 
        string pSubject,
        string pBody, 
        System.Web.Mail.MailFormat pFormat,
        string pAttachmentPath)
    {
    try
    {
        System.Web.Mail.MailMessage myMail = new System.Web.Mail.MailMessage();
        myMail.Fields.Add
            ("http://schemas.microsoft.com/cdo/configuration/smtpserver",
                          "smtp.gmail.com");
        myMail.Fields.Add
            ("http://schemas.microsoft.com/cdo/configuration/smtpserverport",
                          "465");
        myMail.Fields.Add
            ("http://schemas.microsoft.com/cdo/configuration/sendusing",
                          "2");
        //sendusing: cdoSendUsingPort, value 2, for sending the message using 
        //the network.

        //smtpauthenticate: Specifies the mechanism used when authenticating 
        //to an SMTP 
        //service over the network. Possible values are:
        //- cdoAnonymous, value 0. Do not authenticate.
        //- cdoBasic, value 1. Use basic clear-text authentication. 
        //When using this option you have to provide the user name and password 
        //through the sendusername and sendpassword fields.
        //- cdoNTLM, value 2. The current process security context is used to 
        // authenticate with the service.
        myMail.Fields.Add
        ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate","1");
        //Use 0 for anonymous
        myMail.Fields.Add
        ("http://schemas.microsoft.com/cdo/configuration/sendusername",
            pGmailEmail);
        myMail.Fields.Add
        ("http://schemas.microsoft.com/cdo/configuration/sendpassword",
             pGmailPassword);
        myMail.Fields.Add
        ("http://schemas.microsoft.com/cdo/configuration/smtpusessl",
             "true");
        myMail.From = pGmailEmail;
        myMail.To = pTo;
        myMail.Subject = pSubject;
        myMail.BodyFormat = pFormat;
        myMail.Body = pBody;
        if (pAttachmentPath.Trim() != "")
        {
            MailAttachment MyAttachment = 
                    new MailAttachment(pAttachmentPath);
            myMail.Attachments.Add(MyAttachment);
            myMail.Priority = System.Web.Mail.MailPriority.High;
        }

        System.Web.Mail.SmtpMail.SmtpServer = "smtp.gmail.com:465";
        System.Web.Mail.SmtpMail.Send(myMail);
        return true;
    }
    catch (Exception ex)
    {
        throw;
    }
}
}
person Andrew Siemer    schedule 18.06.2009
comment
System.Web.Mail устарел. - person David; 19.06.2009
comment
Старый код из моей библиотеки! Следовательно, утверждение «Незначительная настройка кода ниже» должна работать! - person Andrew Siemer; 24.07.2009
comment
Это предназначено для версий .Net до 4.0? - person Rafael; 04.09.2015
comment
на основе ссылка, вы правы, это не считается ошибкой, это сделано намеренно. Существует два типа SSL-аутентификации для SMTP, и мы поддерживаем только один с System.Net.Mail (по замыслу) - явный SSL. И только Web.Mail может отправлять письма ssl - person Mahdi; 14.05.2017
comment
Кажется, теперь это требование для Gmail? Это решение устранило мою проблему в 2017 году! - person Serj Sagan; 26.09.2017
comment
Любому серьезному программисту: пожалуйста, используйте решение, предоставленное Бобом Маком здесь внизу ;-) - person Stephane Ehret; 24.01.2019

Я опаздываю на эту вечеринку, но предлагаю свой подход всем прохожим, которых может заинтересовать альтернатива.

Как отмечалось в предыдущих ответах, класс System.Net.Mail SmtpClient не поддерживает неявный SSL. Он поддерживает явный SSL, который требует небезопасного подключения к SMTP-серверу через порт 25 для согласования безопасности транспортного уровня (TLS). Я писал о своих трудностях с этой тонкостью здесь.

Короче говоря, SMTP через Implict SSL-порт 465 требует согласования TLS перед подключением к SMTP-серверу. Вместо того, чтобы писать реализацию SMTPS .Net, я обратился к служебной программе под названием Stunnel. Это небольшая служба, которая позволит вам перенаправлять трафик с локального порта на удаленный порт через SSL.

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Stunnel использует части библиотеки OpenSSL, уязвимость которой недавно была опубликована во всех основных технических новостных СМИ. Я считаю, что в последней версии используется исправленный OpenSSL, но используйте его на свой страх и риск.

После установки утилиты небольшое дополнение к файлу конфигурации:

; Example SSL client mode services
[my-smtps]
client = yes
accept = 127.0.0.1:465
connect = mymailserver.com:465

... указывает службе Stunnel перенаправить локальные запросы на порт 465 на мой почтовый сервер на порту 465. Это происходит через TLS, который удовлетворяет сервер SMTP на другом конце.

Используя эту утилиту, следующий код успешно передаст через порт 465:

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

namespace RSS.SmtpTest
{
    class Program
    {
        static void Main( string[] args )
        {
            try {
                using( SmtpClient smtpClient = new SmtpClient( "localhost", 465 ) ) { // <-- note the use of localhost
                    NetworkCredential creds = new NetworkCredential( "username", "password" );
                    smtpClient.Credentials = creds;
                    MailMessage msg = new MailMessage( "[email protected]", "[email protected]", "Test", "This is a test" );
                    smtpClient.Send( msg );
                }
            }
            catch( Exception ex ) {
                Console.WriteLine( ex.Message );
            }
        }
    }
}

Таким образом, преимущество заключается в том, что вы можете использовать Implict SSL и порт 465 в качестве протокола безопасности, при этом используя встроенные в платформу методы отправки почты. Недостатком является то, что для этого требуется использование стороннего сервиса, который может быть бесполезен ни для чего, кроме этой конкретной функции.

person Bob Mc    schedule 10.04.2015
comment
Спасибо, Боб. Просто невероятно, что в 2019 году это остается самым элегантным решением. Использование устаревшего System.Web.Mail.MailMessage просто неприемлемо, тем более, если вы знаете, что вы должны убедиться, что языком ввода по умолчанию является en-US, иначе вы получите COMException: запрошенная часть тела не была найдена в этом сообщении ошибка (которая, кстати, должна автоматически запускать реакцию WTF? ;-) - person Stephane Ehret; 24.01.2019
comment
@StephaneEhret Я согласен. Как я отмечал в своем сообщении в блоге, я намеревался написать неявную SMTP-библиотеку SSL .Net, но просто так и не смог найти время. Доступно несколько библиотек, поддерживающих неявный SSL, но большинство из них мне не подходило. Может, я еще вернусь к этому проекту. - person Bob Mc; 24.01.2019

Он работает с System.Web.Mail (помечен как устаревший):

private const string SMTP_SERVER        = "http://schemas.microsoft.com/cdo/configuration/smtpserver";
private const string SMTP_SERVER_PORT   = "http://schemas.microsoft.com/cdo/configuration/smtpserverport";
private const string SEND_USING         = "http://schemas.microsoft.com/cdo/configuration/sendusing";
private const string SMTP_USE_SSL       = "http://schemas.microsoft.com/cdo/configuration/smtpusessl";
private const string SMTP_AUTHENTICATE  = "http://schemas.microsoft.com/cdo/configuration/smtpauthenticate";
private const string SEND_USERNAME      = "http://schemas.microsoft.com/cdo/configuration/sendusername";
private const string SEND_PASSWORD      = "http://schemas.microsoft.com/cdo/configuration/sendpassword";

System.Web.Mail.MailMessage mail = new System.Web.Mail.MailMessage();

mail.Fields[SMTP_SERVER] = "tempurl.org";
mail.Fields[SMTP_SERVER_PORT] = 465;
mail.Fields[SEND_USING] = 2;
mail.Fields[SMTP_USE_SSL] = true;
mail.Fields[SMTP_AUTHENTICATE] = 1;
mail.Fields[SEND_USERNAME] = "username";
mail.Fields[SEND_PASSWORD] = "password";

System.Web.Mail.SmtpMail.Send(mail);

Какова ваша точка зрения относительно использования устаревшего пространства имен?

person Idriss    schedule 18.06.2009
comment
этот ответ можно улучшить. Здесь нет ни к кому, ни от, ни к теме, ни к телу. То есть вам не хватает всей электронной почты. Конечно, не сложно, но почему бы просто не собрать все в одном месте? - person Matthew; 15.05.2015

В VB.NET при попытке подключиться к порту SSL Rackspace на 465 я столкнулся с той же проблемой (требуется неявный SSL). Я использовал https://www.nuget.org/packages/MailKit/, чтобы для успешного подключения.

Ниже приведен пример сообщения электронной почты в формате HTML.

Imports MailKit.Net.Smtp
Imports MailKit
Imports MimeKit

Sub somesub()
    Dim builder As New BodyBuilder()
    Dim mail As MimeMessage
    mail = New MimeMessage()
    mail.From.Add(New MailboxAddress("", c_MailUser))
    mail.To.Add(New MailboxAddress("", c_ToUser))
    mail.Subject = "Mail Subject"
    builder.HtmlBody = "<html><body>Body Text"
    builder.HtmlBody += "</body></html>"
      mail.Body = builder.ToMessageBody()

      Using client As New SmtpClient
        client.Connect(c_MailServer, 465, True)
        client.AuthenticationMechanisms.Remove("XOAUTH2") ' Do not use OAUTH2
        client.Authenticate(c_MailUser, c_MailPassword) ' Use a username / password to authenticate.
        client.Send(mail)
        client.Disconnect(True)
    End Using 

End Sub
person Cody G    schedule 09.09.2016
comment
Это мне действительно помогло. Это очень хорошая альтернатива SmtpClient, которая не может обрабатывать неявный SSL. Кроме того, он намного более зрелый, чем AIM (предложенный в другом ответе), и отлично работает с UTF-8 (и другими кодировками). Спасибо. - person Alexei - check Codidact; 24.12.2016

Попробуйте бесплатную альтернативу с открытым исходным кодом https://www.nuget.org/packages/AIM Его можно использовать бесплатно и с открытым исходным кодом, и он использует тот же способ, что и System.Net.Mail. Для отправки электронной почты на неявные ssl-порты вы можете использовать следующий код

public static void SendMail()
{    
    var mailMessage = new MimeMailMessage();
    mailMessage.Subject = "test mail";
    mailMessage.Body = "hi dude!";
    mailMessage.Sender = new MimeMailAddress("[email protected]", "your name");
    mailMessage.To.Add(new MimeMailAddress("[email protected]", "your friendd's name")); 
// You can add CC and BCC list using the same way
    mailMessage.Attachments.Add(new MimeAttachment("your file address"));

//Mail Sender (Smtp Client)

    var emailer = new SmtpSocketClient();
    emailer.Host = "your mail server address";
    emailer.Port = 465;
    emailer.SslType = SslMode.Ssl;
    emailer.User = "mail sever user name";
    emailer.Password = "mail sever password" ;
    emailer.AuthenticationMode = AuthenticationType.Base64;
    // The authentication types depends on your server, it can be plain, base 64 or none. 
//if you do not need user name and password means you are using default credentials 
// In this case, your authentication type is none            
    emailer.MailMessage = mailMessage;
    emailer.OnMailSent += new SendCompletedEventHandler(OnMailSent);
    emailer.SendMessageAsync();
}

// A simple call back function:
private void OnMailSent(object sender, AsyncCompletedEventArgs asynccompletedeventargs)
{
if (e.UserState!=null)
    Console.Out.WriteLine(e.UserState.ToString());
if (e.Error != null)
{
    MessageBox.Show(e.Error.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
else if (!e.Cancelled)
{
    MessageBox.Show("Send successfull!", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
} 
person Nil Null    schedule 19.01.2015
comment
вы можете предоставить документацию по этой AIM? ? ? на sourceforge нет документации или веб-сайта ??? - person Fuzed Mass; 30.10.2017
comment
Лучше всего загрузить образец приложения и код. - person Nil Null; 22.03.2018

Если это неявный SSL, похоже, что это невозможно сделать с System.Net.Mail и пока не поддерживается.

http://blogs.msdn.com/webdav_101/archive/2008/06/02/system-net-mail-with-ssl-to-authenticate-against-port-465.aspx

Чтобы проверить, является ли это неявным SSL, попробуйте this.

person Kinze    schedule 18.06.2009

Я знаю, что поздно присоединяюсь к обсуждению, но думаю, что это может быть полезно другим.

Я хотел избежать устаревших вещей, и после долгих попыток я нашел простой способ отправки на серверы, требующие неявного SSL: используйте NuGet и добавьте пакет MailKit в проект. (Я использовал VS2017, нацеленный на .NET 4.6.2, но он должен работать на более низких версиях .NET ...)

Тогда вам нужно будет сделать что-то вроде этого:

using MailKit.Net.Smtp;
using MimeKit;

var client = new SmtpClient();
client.Connect("server.name", 465, true);

// Note: since we don't have an OAuth2 token, disable the XOAUTH2 authentication mechanism.
client.AuthenticationMechanisms.Remove ("XOAUTH2");

if (needsUserAndPwd)
{
    // Note: only needed if the SMTP server requires authentication
    client.Authenticate (user, pwd);
}

var msg = new MimeMessage();
msg.From.Add(new MailboxAddress("[email protected]"));
msg.To  .Add(new MailboxAddress("[email protected]"));
msg.Subject = "This is a test subject";

msg.Body = new TextPart("plain") {
    Text = "This is a sample message body"
};

client.Send(msg);
client.Disconnect(true);

Конечно, вы также можете настроить его, чтобы использовать явный SSL или вообще не использовать транспортную безопасность.

person Luke    schedule 13.09.2017
comment
Я использую код, основанный на приведенном выше коде, для отправки писем через mailkit, но я получаю сообщение об ошибке, видите ли вы здесь, я буду очень вам рад. stackoverflow.com/questions/46421323/ - person Fuzed Mass; 30.10.2017
comment
Я ответил на ваше сообщение, а затем добавил дополнительные параметры .. но ваша проблема кажется слишком широкой, чтобы получить простой ответ, если вы не попытаетесь исключить некоторые из возможных причин .. - person Luke; 03.04.2018

Вы также можете подключиться через порт 465, но из-за некоторых ограничений пространства имен System.Net.Mail вам, возможно, придется изменить свой код. Это связано с тем, что пространство имен не предлагает возможности устанавливать неявные SSL-соединения. Это обсуждается на http://blogs.msdn.com/b/webdav_101/archive/2008/06/02/system-net-mail-with-ssl-to-authenticate-against-port-465..aspx.

Можно создавать неявные соединения, не используя теперь уже устаревшее пространство имен System.Web.Mail, но при этом необходимо получить доступ к Microsoft CDO (объекту совместных данных). Я привел пример использования CDO в другом обсуждении (GMail SMTP через C # .Net ошибки на всех портах).

Надеюсь это поможет!

person Bryan Allred    schedule 03.10.2010

Как указано в комментарии на

http://blogs.msdn.com/webdav_101/archive/2008/06/02/system-net-mail-with-ssl-to-authenticate-against-port-465.aspx

с System.Net.Mail используйте порт 25 вместо 465:

Вы должны установить SSL = true и Port = 25. Сервер отвечает на ваш запрос от незащищенного 25, а затем бросает соединение с защищенным 465.

person net_prog    schedule 18.01.2018
comment
Мне нужно -1 это. На процитированной странице блога есть единственный комментарий-ссылка на это без подтверждения. Этот комментарий относится к другому блогу на русском языке, в котором также нет ни одной подтверждающей записи. Пока не будет подтверждений, что это фактическое решение, пока это один парень, за которым следует один парень, за которым следует один парень ... и этого недостаточно для SO-ответа. - person TonyG; 30.08.2018
comment
Приложение: в этом ответе описывается подключение к порту x, а затем переход к порту y. Это определение STARTTLS, которое, по словам ОП, ему не нужно. Пространство имен System.Net.Mail поддерживает только явный SSL. Явный SSL запускается как незашифрованный на порту 25, затем выдает сигнал STARTTLS и затем переключается на зашифрованное соединение. - Ссылка: support.microsoft.com/en-us/help/950260/ Я проверил System.Net.Mail.SmtpClient действительно ли < / b> поддержка соединений порта 587 для STARTTLS. Мне не удалось подключиться 25. - person TonyG; 30.08.2018

Если есть какие-либо сомнения в этом коде, задайте свои вопросы (здесь номер порта Gmail - 587)

// code to Send Mail 
// Add following Lines in your web.config file 
//               <system.net>
//                  <mailSettings>
//                    <smtp>
//                        <network host="smtp.gmail.com" port="587" userName="[email protected]" password="yyy"   defaultCredentials="false"/>
//                    </smtp>
//               </mailSettings>
//               </system.net>
// Add below lines in your config file inside appsetting tag <appsetting></appsetting>
//          <add key="emailFromAddress" value="[email protected]"/>
//       <add key="emailToAddress" value="[email protected]"/>
//        <add key="EmailSsl" value="true"/>

// Namespace Used

using System.Net.Mail;
     public static bool SendingMail(string subject, string content)
    {
       // getting the values from config file through c#
        string fromEmail = ConfigurationSettings.AppSettings["emailFromAddress"];
        string mailid = ConfigurationSettings.AppSettings["emailToAddress"];
        bool useSSL;
        if (ConfigurationSettings.AppSettings["EmailSsl"] == "true")
        {
            useSSL = true;
        }
        else
        {
            useSSL = false;
        }



        SmtpClient emailClient;
        MailMessage message;
        message = new MailMessage();
        message.From = new MailAddress(fromEmail);
        message.ReplyTo = new MailAddress(fromEmail);
        if (SetMailAddressCollection(message.To, mailid))
        {
            message.Subject = subject;
            message.Body = content;
            message.IsBodyHtml = true;
            emailClient = new SmtpClient();
            emailClient.EnableSsl = useSSL;
            emailClient.Send(message);
        }
        return true;
    }
    // if you are sending mail in group

    private static bool SetMailAddressCollection(MailAddressCollection toAddresses, string    mailId)
    {
        bool successfulAddressCreation = true;
        toAddresses.Add(new MailAddress(mailId));
        return successfulAddressCreation;
    }
person RekhaShanmugam    schedule 15.05.2014
comment
Вопрос касался использования порта 465, но ваш пример относится к порту 587. Есть существенная разница. - person RobSiklos; 12.06.2014

Для gmail эти настройки у меня работали, нужна была строчка ServicePointManager.SecurityProtocol. Поскольку я настроил двухэтапную аутентификацию, мне нужно было получить пароль приложения из генератора паролей приложений Google .

SmtpClient mailer = new SmtpClient();
mailer.Host = "smtp.gmail.com";
mailer.Port = 587;
mailer.EnableSsl = true;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;
person user2584621    schedule 10.06.2016

Чтобы расширить ответ Идрисса, вот мой статический метод, который работает как чемпион:

using System.Web.Mail;

public static void SendEmail(String Subject, String sMessage, String EmailAddress, String STMPServer, int SMTPPort, String UserName = "", String Password = null, Boolean IsSecure = true, Boolean IsHTML = true, String FromAddress = "[email protected]") {
    string SMTP_SERVER = "http://schemas.microsoft.com/cdo/configuration/smtpserver";
    string SMTP_SERVER_PORT = "http://schemas.microsoft.com/cdo/configuration/smtpserverport";
    string SEND_USING = "http://schemas.microsoft.com/cdo/configuration/sendusing";
    string SMTP_USE_SSL = "http://schemas.microsoft.com/cdo/configuration/smtpusessl";
    string SMTP_AUTHENTICATE = "http://schemas.microsoft.com/cdo/configuration/smtpauthenticate";
    string SEND_USERNAME = "http://schemas.microsoft.com/cdo/configuration/sendusername";
    string SEND_PASSWORD = "http://schemas.microsoft.com/cdo/configuration/sendpassword";

    MailMessage mail = new MailMessage();

    mail.Fields[SMTP_SERVER] = STMPServer;
    mail.Fields[SMTP_SERVER_PORT] = SMTPPort;
    mail.Fields[SEND_USING] = 2;
    mail.Fields[SMTP_USE_SSL] = IsSecure;
    if(!String.IsNullOrEmpty(UserName) && !String.IsNullOrEmpty(Password))
    {
        mail.Fields[SMTP_AUTHENTICATE] = 1;
        mail.Fields[SEND_USERNAME] = UserName;
        mail.Fields[SEND_PASSWORD] = Password;
    }
    else
    {
        mail.Fields[SMTP_AUTHENTICATE] = 0;
    }
    mail.From = FromAddress;
    mail.To = EmailAddress;
    mail.Subject = Subject;

    if (IsHTML)
    {
        mail.BodyFormat = MailFormat.Html;
    }
    else
    {
        mail.BodyFormat = MailFormat.Text;
    }
    mail.Body = sMessage;

    SmtpMail.Send(mail);
}
person NitrusCS    schedule 25.08.2020