2019年10月11日 星期五

[研究][C#][ASP.NET] 寄信 (使用 MailKit 和 MimeKit)

[研究][C#][ASP.NET] 寄信 (使用 MailKit 和 MimeKit)

2019-10-11


********************************************************************************
相關3篇

[研究][C#][ASP.NET] 加簽寄信 (使用 MailKit 和 MimeKit)
https://shaurong.blogspot.com/2019/10/caspnet-mailkit-mimekit_13.html

[研究][C#][ASP.NET] 寄信 (使用 MailKit 和 MimeKit)
https://shaurong.blogspot.com/2019/10/caspnet-mailkit-mimekit_11.html

[研究][C#][ASP.NET] 加簽寄信 (使用 System.Net.Mail.MailMessage)
https://shaurong.blogspot.com/2019/10/caspnet-systemnetmailmailmessage.html
更新補充一些資訊,更新到 2021-11-29

********************************************************************************

using MailKit.Net.Smtp;
using MailKit.Security;
using MimeKit;
using System;

namespace WebApplication2
{
    public partial class Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            // http://www.mimekit.net/docs/html/Creating-Messages.htm
            var message = new MimeMessage();
            message.From.Add(new MailboxAddress("xxxx", "xxxx@google.com"));
            message.To.Add(new MailboxAddress("yyyyy", "yyyyy@mail2000.com.tw"));
            message.Subject = "How you doin?";

            message.Body = new TextPart("plain")
            {
                Text = @"Hey Alice,

What are you up to this weekend? Monica is throwing one of her parties on
Saturday and I was hoping you could make it.

Will you be my +1?

-- Joey
"
            };

            // http://www.mimekit.net/docs/html/M_MailKit_Net_Smtp_SmtpClient__ctor.htm
            using (var client = new SmtpClient())
            {
                client.Connect("smtp.gmail.com", 465, SecureSocketOptions.SslOnConnect);

                client.Authenticate("xxxx@gmail.com", "你的密碼");

                try
                {
                    //foreach (var message in messages)
                    //{
                    client.Send(message);
                //}
             
                    client.Disconnect(true);
                    Label1.Text = "成功寄出。";
                }
                catch (Exception ex)
                {
                    if (ex!=null)
                    {
                        Label1.Text = ex.Message.ToString();
                    }
                    else
                    {
                        Label1.Text = "不明錯誤。";
                    }
                }
            }
        }
    }
}

但是改用 IIS SMTP  ( Replay 有開),程式修改
( 因為 IIS  SMTP 不支援 SSL 傳輸,但是 Gmail 必須使用 SSL 傳輸)
                client.Connect("localhost", 25, SecureSocketOptions.None);
                client.Connect("localhost", 25, SecureSocketOptions.Auto);
                client.Connect("localhost", 25);

註解掉下面
( 因為 IIS SMTP 預設不用驗證帳號、密碼 )
( 有的 Mail 元件的 API 對使用 IIS SMTP 時候,設定了帳號、密碼時,會不予理會,不會出錯;但是 MailKit 似乎不行,一定不能有這行 )
                // client.Authenticate("xxxx@gmail.com", "你的密碼");

寄信顯示成功,但是會留在 C:\inetpub\mailroot\Queue 目錄。

後來把 Windows 防火牆 關閉,稍等一下,信件就從 Queue 中一封封寄出了。

(完)

相關

[研究][C#][ASP.NET] 寄信 (使用 MailKit 和 MimeKit)

mimekit - 在MimeKit上,簽名和加密
http://hant.ask.helplib.com/mimekit/post_4274560

MailKit Documentation - Creating messages
http://www.mimekit.net/docs/html/Creating-Messages.htm
有簡單寄信範例 (但沒有加簽)

MailKit Documentation - SmtpClient Constructor
http://www.mimekit.net/docs/html/M_MailKit_Net_Smtp_SmtpClient__ctor.htm

MailKit Documentation - Digitally Signing Messages using S/MIME
http://www.mimekit.net/docs/html/Working-With-SMime.htm#Sign

.NET Framework 中過時的類型
https://docs.microsoft.com/zh-tw/dotnet/framework/whats-new/obsolete-types
System.Web.Mail.SmtpMail 過時,建議的替代做法是 System.Net.Mail.SmtpClient。

System.Net.Mail.SmtpClient
https://docs.microsoft.com/zh-tw/dotnet/api/system.net.mail.smtpclient?view=netframework-4.8
System.Net.Mail.SmtpClient 淘汰,建議改用 https://github.com/jstedfast/MailKit 和 https://github.com/jstedfast/MimeKit

GitHub - jstedfast/MailKit: A cross-platform .NET library for IMAP, POP3, and SMTP.
https://github.com/jstedfast/MailKit

GitHub - jstedfast/MimeKit: A .NET MIME creation and parser library with support for S/MIME, PGP, DKIM, TNEF and Unix mbox spools.
https://github.com/jstedfast/MimeKit

[研究][C#][ASP.NET] 加簽寄信 (使用 System.Net.Mail.MailMessage)
https://shaurong.blogspot.com/2019/10/caspnet-systemnetmailmailmessage.html

[研究][C#]加密加簽寄信(使用Cpi.Net.SecureMail)(一)
http://shaurong.blogspot.com/2017/02/ccpinetsecuremail.html

[研究][C#]加密加簽寄信(使用Cpi.Net.SecureMail)(二)
http://shaurong.blogspot.com/2017/02/ccpinetsecuremail_13.html

[研究][C#][ASP.NET] IIS SMTP 寄信失敗,拒絕存取路徑
https://shaurong.blogspot.com/2019/10/caspnet-iis-smtp.html

[研究] [ASP.NET] [C#] [WebForm] 寄信問題
http://shaurong.blogspot.com/2017/06/aspnet-c-webform.html

An S/MIME Library for Sending Signed and Encrypted E-mail
Pete Everett, 15 Jul 2010
https://www.codeproject.com/Articles/41727/An-S-MIME-Library-for-Sending-Signed-and-Encrypted

ASP.NET寄發加密加簽信件
https://www.nccst.nat.gov.tw/ArticlesDetail?lang=zh&seq=1160

Cpi.Net.SecureMail
https://www.codeproject.com/script/Content/ViewAssociatedFile.aspx?rzp=%2FKB%2Fsecurity%2FCPI_NET_SecureMail%2F%2FCpi.Net.SecureMail_src.zip&zep=Cpi.Net.SecureMail_src%2FCpi.Net.SecureMail%2FSecureMailMessage.cs&obid=41727&obtid=2&ovid=5

如何透過 .NET 送出一個包含 S/MIME 簽章的郵件
2009/06/06 21:20
https://blog.miniasp.com/post/2009/06/06/How-to-send-s-mime-email-using-net


沒有留言:

張貼留言