Проблемы с исходящей почтой с разными портами - PullRequest
0 голосов
/ 16 августа 2011

Я пишу приложение, которое отправляет электронные письма на основании введенного адреса электронной почты и пароля.Я немного новичок в отправке электронных писем из приложений.Я хотел знать, как мне обрабатывать различные номера портов, которые там есть.Например, gmail нужно 587, а Yahoo нужно 465, а перенаправлять - 25. Разве для этого нет единого решения?Также это звучит довольно глупо, но адреса или порты SMTP-сервера меняются со временем?

Ответы [ 3 ]

1 голос
/ 16 августа 2011

Порты могут измениться, если администраторы на стороне продавца (Google, Yahoo и т. Д.) Намерены изменить свою политику.Так что AFAIK не существует какого-либо унифицированного решения для этого, достаточно иметь документ XML с этим параметром и использовать его в своем приложении.

0 голосов
/ 16 августа 2011

Использовали что-то вроде этого, решение по одной точке для вашей проблемы.

public static bool SendEmail(MailMessage message)
{
    try
    {
        // call the full overload of if GetSMTPClient you want to override the default settings
        using (SmtpClient smtp = GetSMTPClient(true))
        {
            smtp.Send(message);
        }
        return true;
    }
    catch (Exception exception)
    {
        Elmah.ErrorSignal.FromCurrentContext().Raise(exception);
        return false;
    }
}

/// <summary>
/// Gets the default SMTP Client (Gmail here)
/// </summary>
/// <param name="isSetAtWebConfig">Has all the settings been specified at web.config</param>
/// <returns>Gets the default SMTP Client</returns>
public static SmtpClient GetSMTPClient(bool isSetAtWebConfig)
{
    try
    {
        SmtpClient client;
        if (isSetAtWebConfig)
        {
            client = new SmtpClient();
        }
        else
        {
            client = GetSMTPClient("smtp.gmail.com", 587, true,
                SmtpDeliveryMethod.Network, false,
                "someone@gmail.com", "somepass");
        }
        return client;
    }
    catch (Exception exception)
    {
        Elmah.ErrorSignal.FromCurrentContext().Raise(exception);
        throw;
    }
}

/// <summary>
/// Gets the SMTP Client with custom settings default settings
/// </summary>
/// <param name="host">SMTP Host</param>
/// <param name="port">SMTP Port</param>
/// <param name="enableSSL">Has SMTP enabled SSL</param>
/// <param name="delieveryMethod">SMTP Delivery Method</param>
/// <param name="useDefaultCredentials">Is SMTP using Default Credentials</param>
/// <param name="fromAddress">SMTP Client UserName</param>
/// <param name="fromPassword">SMTP Client Password</param>
/// <returns>Gets the new custom created SMTP Client</returns>
public static SmtpClient GetSMTPClient(string host, int port, 
    bool enableSSL, SmtpDeliveryMethod delieveryMethod, 
    bool useDefaultCredentials, 
    string fromAddress, string fromPassword)
{
    try
    {
        return new SmtpClient
        {
            Host = host,
            Port = port,
            EnableSsl = enableSSL,
            DeliveryMethod = delieveryMethod,
            UseDefaultCredentials = useDefaultCredentials,
            Credentials = new NetworkCredential(fromAddress, fromPassword)
        };
    }
    catch (Exception exception)
    {
        Elmah.ErrorSignal.FromCurrentContext().Raise(exception);
        throw;
    }
}

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

0 голосов
/ 16 августа 2011

System.Net.Mail.SmtpClient позволяет передавать порт в конструкторе.

SmtpClient client = new SmtpClient("mail.google.com:587");
client.Send("bob@bob.com", "jim@jim.com", "Subject", "Test Message");

Просто измените строку «host» в конструкторе, на основе которого вы используете.Как правило, почтовые службы используют нестандартные порты SMTP для предотвращения атак, связанных со злоупотреблениями и проникновением и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...