myesn

myEsn2E9

hi
github

ABP: メール送信統合 MailKit とアリババクラウド企業メールの設定

コメント デバッグ 空実装#

DomainModule では、デフォルトでメール送信の空実装が追加されており、ローカルでテストするためにコメントアウトしました。もちろん、これは完全に自分のニーズ次第です:

//#if DEBUG
//        context.Services.Replace(ServiceDescriptor.Singleton<IEmailSender, NullEmailSender>());
//#endif

MailKit の統合#

MailKit を使用する理由は、ABP ソースコード Volo.Abp.Emailing.Smtp.SmtpEmailSender推奨です:

Logger.LogWarning("We don't recommend that you use the SmtpClient class for new development because SmtpClient doesn't support many modern protocols. " +
                               "Use MailKit(https://docs.abp.io/en/abp/latest/MailKit) or other libraries instead." +
                               "For more information, see https://github.com/dotnet/platform-compat/blob/master/docs/DE0005.md");

まず、MailKit Integration ドキュメントを確認し、Domain 層に Volo.Abp.MailKit をインストールします。

インストール時には注意が必要です。Volo.Abp.MailKitVolo.Abp.Emailing パッケージに依存しており、Domain 層にはデフォルトで Volo.Abp.Emailing がインストールされているため、Volo.Abp.MailKit をインストールすると最新のバージョンがインストールされ、Volo.Abp.Emailing パッケージがダウングレードされる可能性があります。したがって、これらの 2 つのパッケージのバージョン番号は一致させるのが望ましいです:
image

デフォルト設定の変更#

注意が必要なのは、メールアカウントに SMTP サービスが有効になっていることを確認することです。

デフォルトの管理者アカウント postmaster でメールにログインし、アカウントリストを開いて、送信メールアカウントの設定が以下のようになっていることを確認します:
image

次に、送信メールアカウントでログインし、アカウントセキュリティを開き、一番下までスクロールして「三方クライアントログインセキュリティ管理」を見つけ、「三方クライアントセキュリティパスワード」を有効にし、「新しいパスワードを生成」をクリックします。後続のコードで使用されます。

Domain プロジェクトの Settings/?SettingDefinitionProvider に以下のコードを追加します:

public class ?SettingDefinitionProvider : SettingDefinitionProvider
{
    public override void Define(ISettingDefinitionContext context)
    {
        //ここに独自の設定を定義します。例:
        //context.Add(new SettingDefinition(?Settings.MySetting1));
        // context.Add はキーの値を上書きします:https://github.com/abpframework/abp/blob/f47e9252a3d57c12c2ac06e1f09034acd70582e0/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingDefinitionContext.cs#L25

        // 注意:設定を追加または変更した後、Web プロジェクトを再起動することで有効になります

        context.Add(
            // メール設定:https://docs.abp.io/en/abp/latest/Emailing#email-settings
            // デフォルト設定の参考:Volo.Abp.Emailing.EmailSettingProvider
            // ページ上の「テストメールを送信」ボタンをクリックすると、再度送受信情報を確認するポップアップが表示され、受信者はデフォルトで CurrentUser.Email になります
            new SettingDefinition(
                EmailSettingNames.Smtp.Host,
                "smtp.qiye.aliyun.com",
                L("DisplayName:Abp.Mailing.Smtp.Host"),
                L("Description:Abp.Mailing.Smtp.Host")),

            // ABP のデフォルトは 25 ポートです
            //new SettingDefinition(EmailSettingNames.Smtp.Port,
            //    "25",
            //    L("DisplayName:Abp.Mailing.Smtp.Port"),
            //    L("Description:Abp.Mailing.Smtp.Port")),

            // 注意が必要なのは、阿里云企業メールの postmaster アカウントはデフォルトでログインできないため、SMTP サービスが有効になっていません。http://mail.secondstrust.com/admin/#/account-email ページでそのアカウントを見つけ、詳細に入ります。
            // 他のアカウントを使用して、以下のリンクで「三方クライアントログインセキュリティ管理」を見つけ、「三方クライアントセキュリティパスワード」を有効にし、新しいパスワードを生成して以下の Password に適用します。
            // 三方クライアントログインセキュリティ管理:http://mail.secondstrust.com/alimail/entries/v5.1/setting/account-security
            new SettingDefinition(
                EmailSettingNames.Smtp.UserName,
                defaultValue: "ここに送信者のメールアドレスを記入します。例えば x@q.com",
                displayName: L("DisplayName:Abp.Mailing.Smtp.UserName"),
                description: L("Description:Abp.Mailing.Smtp.UserName")),

            new SettingDefinition(
                EmailSettingNames.Smtp.Password,
                defaultValue: "ここに生成された三方クライアントパスワードを記入します",
                displayName: L("DisplayName:Abp.Mailing.Smtp.Password"),
                description: L("Description:Abp.Mailing.Smtp.Password"),
                // isEncrypted:true に設定する場合、保存される defaultValue は手動で暗号化された文字列であり、使用時に IStringEncryptionService.Decrypt によって自動的に復号化されます
                isEncrypted: false),

            new SettingDefinition(
                EmailSettingNames.Smtp.Domain,
                defaultValue: "ここにメールドメインを記入します。例えば q.com",
                displayName: L("DisplayName:Abp.Mailing.Smtp.Domain"),
                description: L("Description:Abp.Mailing.Smtp.Domain")),

            // true の場合、上記で提供されたユーザー名とパスワードの代わりにデフォルトの資格情報を使用します(「true」または「false」。デフォルト値:「true」)。
            new SettingDefinition(
                EmailSettingNames.Smtp.UseDefaultCredentials,
                "false",
                L("DisplayName:Abp.Mailing.Smtp.UseDefaultCredentials"),
                L("Description:Abp.Mailing.Smtp.UseDefaultCredentials")),

            // SSL を有効にしないでください。そうしないとエラーが発生します
            //new SettingDefinition(
            //    EmailSettingNames.Smtp.EnableSsl,
            //    "true",
            //    L("DisplayName:Abp.Mailing.Smtp.EnableSsl"),
            //    L("Description:Abp.Mailing.Smtp.EnableSsl")),

            new SettingDefinition(
                EmailSettingNames.DefaultFromAddress,
                "ここに送信者のメールアドレスを記入します。例えば x@q.com",
                L("DisplayName:Abp.Mailing.DefaultFromAddress"),
                L("Description:Abp.Mailing.DefaultFromAddress")),

            new SettingDefinition(EmailSettingNames.DefaultFromDisplayName,
                "送信者のメール表示名を記入します。例えば x",
                L("DisplayName:Abp.Mailing.DefaultFromDisplayName"),
                L("Description:Abp.Mailing.DefaultFromDisplayName"))
            );
    }

    private static LocalizableString L(string name)
    {
        return LocalizableString.Create<IdentityResource>(name);
    }

注意:プログラムが阿里云サーバーにデプロイされている場合、25 ポートにアクセスできない可能性があるため、次のように変更する必要があります:

// ABP のデフォルトは 25 ポートで、SSL を有効にするとポートが 465 に変更されます
new SettingDefinition(EmailSettingNames.Smtp.Port,
    "465", //"25",
    L("DisplayName:Abp.Mailing.Smtp.Port"),
    L("Description:Abp.Mailing.Smtp.Port")),

// 阿里云サーバー:国際的および国内でスパムメールが厳しく管理されているため、我が国の「インターネット情報サービス管理方法」および「中国インターネット協会反スパムメール規範」ではスパムメールに関する説明と管理規範があります。
// 良好なネットワーク環境を共同で維持するために、阿里云の新規購入サーバーでは 25 ポートのメールサービスを提供しなくなりました。465 の暗号化ポートを使用してメールを送信するか、メール送信プロバイダーに他の SMTP 発信ポートがあるかどうかを確認することをお勧めします。ご不便をおかけして申し訳ありません。
new SettingDefinition(
    EmailSettingNames.Smtp.EnableSsl,
    "true",
    L("DisplayName:Abp.Mailing.Smtp.EnableSsl"),
    L("Description:Abp.Mailing.Smtp.EnableSsl")),    

理由は:
image

テスト#

Web プロジェクトを起動し、管理者アカウントでログインして、次のページを開き、「テストメールを送信」ボタンをクリックします。クリックすると、送受信情報を確認するポップアップが表示され、送信をクリックすると送信されます。

image
image
image

心配な場合は、送信アカウントで 阿里云企業メール にログインし、送信箱で確認できます。

返送メール#

時々、メールが正常に送信された(コードはエラーを報告しない)が、受信者が受け取れない場合があります。これは阿里云によって返送されたためです:
image

解決策:https://help.aliyun.com/document_detail/36620.html

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。