技術共有

.net C# NetEase 163 メールボックスを使用して smtp サービスを構築し、電子メール送信機能を実現します

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

機能説明: メール認証を利用してユーザー登録の有効化とパスワードの取得を実現します。メールボックスは NetEase 163 を SMTP サーバーとして選択します。

実際のテスト状況: タイプ 1: ほとんどのサーバー オペレーターのポート 25 はデフォルトでブロックされています。オペレーターに連絡してポート 25 のブロックを解除することができます。ブロックを解除すると、ポート 25 が使用できるようになります。 2 番目のタイプ: 465 および 587 暗号化ポートを使用する。テスト後、587 ポートは送信に失敗し、「送信接続からデータを読み取ることができません」というメッセージが返されたため、ここでは 465 ポートの構成のみを行います。以下に 2 つの成功例のコードを示しますので、実際の状況に応じて選択してください。

インターネット上の情報から、Alibaba と QQ のメールボックスの 587 ポートでも送信に失敗したことがわかり、現在 3 つの大手通信事業者である NetEase、Alibaba、QQ の stmp サービスのポート 587 に障害が発生していることがわかっています。

ステップ 1: smtp サービスを開始します。 NetEase メールボックスにログインします [設定] - 左側のメニューで [POP3/SMTP/IMAP] を見つけ、サービスを有効にして認証パスワードを取得します (注: コード内のパスワードは認証パスワードを使用します)。写真のようにセットしてください

ステップ 2: サーバーのファイアウォール スタック ルールを設定し、ポート 465 を追加します。

ステップ 3: コードを作成します。

Send25 は、ポート 25 で電子メールを送信する機能をテストする方法です。使用するクラスライブラリ System.Net.Mail

パブリック void Send25()
        {

//this.SmtpHost //SMTPサーバーアドレスを指定します

//this.SmtpPort //SMTPサーバーポート

//this.FromEmailAddress //メール送信用のメールアドレス

//this.FormEmailPassword //メール送信用のメールパスワード、認証コードはここで使用されます

//this.ToList //電子メールを受信するための電子メール アドレス。カンマで区切られたコレクションにすることができます。


//System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12;//解除可能
SmtpClient smtp = new SmtpClient() //SmtpClient をインスタンス化します。
smtp.deliveryMethod = SmtpdeliveryMethod.Network; // smtp の送信モードをネットワークに設定します。
smtp.EnableSsl = false; //smtp サーバーが SSL 暗号化を有効にするかどうか
smtp.Host = this.SmtpHost; //SMTP サーバーのアドレスを指定します。
smtp.Port = this.SmtpPort; //smtp サーバーのポートを指定します。デフォルトは 25 です。デフォルトのポートを使用する場合は省略できます。
smtp.UseDefaultCredentials = true; //SMTP サーバーが ID 認証を必要としない場合は、次の方法を使用します。ただし、現在は基本的に認証は必要ありません。
//smtp.EnableSsl = false;
smtp.Credentials = new NetworkCredential(this.FromEmailAddress, this.FormEmailPassword) //認証が必要な場合は、次のメソッドを使用します。

MailMessage mm = new MailMessage() //メールクラスをインスタンス化します。
mm.Priority = MailPriority.Normal; //メールの優先度はLow、Normal、Highに分かれており、通常はNormalが使用可能です。
mm.From = new MailAddress(this.FromEmailAddress, "管理者", Encoding.GetEncoding(936));

//受信者
if (!string.IsNullOrEmpty(this.ToList))
mm.To.Add(これをToListに追加します);
//CCの人
if (!string.IsNullOrEmpty(this.CCList))
CCList に CC を追加します。
//CC
if (!string.IsNullOrEmpty(this.BccList))
mm.Bcc.Add(this.BccList);

mm.Subject = this.Subject //メールのタイトル;
mm.SubjectEncoding = Encoding.GetEncoding(936); //これは非常に重要です。メールのタイトルに中国語が含まれている場合は、ここで指定する必要があります。そうしないと、相手に文字化けが発生する可能性があります。
mm.IsBodyHtml = this.IsBodyHtml; //メール本文が HTML 形式かどうか
mm.BodyEncoding = Encoding.GetEncoding(936); //メール本文のエンコーディングが正しく設定されていないため、受信者は文字化けしてしまいます。
mm.Body = this.Body //メール本文;
//メール添付ファイル
(this.AttachmentList != null && this.AttachmentList.Count > 0) の場合
            {
foreach (this.AttachmentList 内の添付ファイル attachment)
                {
mm.Attachments.Add(添付ファイル);
                }
            }
smtp.Send(mm);

        }

Send465 は、ポート 465 で電子メールを送信する機能をテストする方法です。使用するクラスライブラリ System.Web.Mail

パブリックブール Send465()
        {
// メールの件名
System.Web.Mail.MailMessage mmsg = 新しい System.Web.Mail.MailMessage();
//メールの件名
mmsg.Subject = "件名";
mmsg.BodyFormat = System.Web.Mail.MailFormat.Html;
//メール本文
mmsg.Body = "テキスト";

//テキストエンコーディング
mmsg.BodyEncoding = Encoding.UTF8;
//優先度
mmsg.Priority = System.Web.Mail.MailPriority.Normal;
//送信者のメールアドレス
mmsg.From = 電子メール;
//受信者の受信箱アドレス
mmsg.To = 電子メール;

mmsg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", "1");
//ユーザー名
mmsg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", 電子メール);
//パスワード(認証コード)
mmsg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", Emailpwd);
//ポート
mmsg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserverport", ポート);
//SSLかどうか
mmsg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpusessl",true);
//SMTPサーバー
System.Web.Mail.SmtpMail.SmtpServer = ホスト;
試す
            {
System.Web.Mail.SmtpMail.Send(mmsg);
true を返します。
            }
catch (例外例)
            {
false を返します。
            }
        }