4

gmail smtp を使用してローカル ホストからメールを送信できますか? 試行中にエラーが発生しました 操作がタイムアウトしました。

過去 3 日間のローカル ホストからメールを送信しようとしています。gmail を使用してホスティング サーバーからメールを送信すると問題なく動作しますが、localhost では動作しません。ファイアウォールのウイルス対策を無効にしましたが、それでも不運です。localhost からメールを送信するために gmail を使用したことがありますか (サーバーは関与しません)。

可能であれば、ここに私のコードを示してください。私を助けて、私を導いてください。

ありがとう

 protected void btnConfirm_Click(object sender, EventArgs e)
{
    MailMessage message = new MailMessage();
    message.To.Add("me@hotmail.com");
    message.From = new MailAddress("xxxxxx@gmail.com");
    message.Subject = "New test mail";
    message.Body = "Hello test message succeed";
    message.IsBodyHtml = true;
    message.BodyEncoding = System.Text.Encoding.ASCII;
    message.Priority = System.Net.Mail.MailPriority.High;

    SmtpClient smtp = new SmtpClient();
    smtp.EnableSsl = true;
    smtp.Port = 465;        
    smtp.UseDefaultCredentials = false;
    smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
    smtp.Host = "smtp.gmail.com";
    smtp.Credentials = new NetworkCredential("xxxxxx@gmail.com", "**mypassword**");
    try
    {
        smtp.Send(message);
    }
    catch (Exception ex)
    {
        throw ex;
    }
}
4

3 に答える 3

5

はい、localhost から gmail を使用してメールを送信できます。

以前、gmail を使用してメールを送信する方法についてブログ投稿を書きました。

ブログ投稿からコード スニペットを貼り付けます。

これは作業コードであり、私はよく使用します。

/// <summary>
/// A Generic Method to send email using Gmail
/// </summary>
/// <param name="to">The To address to send the email to</param>
/// <param name="subject">The Subject of email</param>
/// <param name="body">The Body of email</param>
/// <param name="isBodyHtml">Tell whether body of email will be html of plain text</param>
/// <param name="mailPriority">Set the mail priority to low, medium or high</param>
/// <returns>Returns true if email is sent successfuly</returns>
public static Boolean SendMail(String to, String subject, String body, Boolean isBodyHtml, MailPriority mailPriority)
{
    try
    {
        // Configure mail client (may need additional
        // code for authenticated SMTP servers)
        SmtpClient mailClient = new SmtpClient("smtp.gmail.com", 587);

        // set the network credentials
        mailClient.Credentials = new NetworkCredential("YourGmailEmail@gmail.com", "YourGmailPassword");

        //enable ssl
        mailClient.EnableSsl = true;

        // Create the mail message (from, to, subject, body)
        MailMessage mailMessage = new MailMessage();
        mailMessage.From = new MailAddress("YourGmailEmail@gmail.com");
        mailMessage.To.Add(to);

        mailMessage.Subject = subject;
        mailMessage.Body = body;
        mailMessage.IsBodyHtml = isBodyHtml;
        mailMessage.Priority = mailPriority;

        // send the mail
        mailClient.Send(mailMessage);

        return true;
    }
    catch (Exception ex)
    {
        return false;
    }
}
于 2011-01-15T06:37:36.633 に答える
2

エラーが の場合、Operation has timed outネットワーク ファイアウォールが指定されたホスト/ポートへの送信アクセスをブロックしている可能性があります。これは、インターネット アクセスを制限するためにファイアウォール/プロキシ サーバーを使用しているオフィスに当てはまります。localhost でファイアウォールを無効にしても役に立ちません。

これを確認する 1 つの方法は、telnet smtp.gmail.com 465. これがタイムアウトした場合、問題は明らかです。

于 2011-01-15T06:23:59.590 に答える
1

ポート587を使用

ところで、それをthrow excatch ブロックに入れるのは本当に悪いことです。スタック トレースが失われます。これはデバッグ目的だけだったと確信していますが、同じ例外を再スローするために を使用throwせずに使用する方がよいでしょう。ex

于 2011-01-15T06:41:07.090 に答える