Maison >développement back-end >Tutoriel C#.Net >Comment .net envoie-t-il des e-mails ?

Comment .net envoie-t-il des e-mails ?

零下一度
零下一度original
2017-06-23 16:14:582514parcourir

Répertoire des documents

  • Introduction

  • IEmailSender

    • ISmtpEmailSender

    • NullEmailSender

  • Configuration

  • MailKit intégré

    • Installation

    • Intégration

    • Utilisation

    • Personnalisation

Introduction

L'envoi d'e-mails est une tâche très courante qui est requise par presque toutes les applications. Abp fournit un cadre de base pour envoyer simplement des e-mails et sépare la configuration du service de messagerie pour celui-ci.

IEmailSender

C'est un service que vous pouvez simplement utiliser pour envoyer des e-mails sans connaître ses détails :

public class TaskManager : IDomainService
{private readonly IEmailSender _emailSender;    public TaskManager(IEmailSender emailSender)
    {
        _emailSender = emailSender;
    }public void Assign(Task task, Person person)
    {//Assign task to the persontask.AssignedTo = person;//Send a notification email        _emailSender.Send(
            to: person.EmailAddress,
            subject: "You have a new task!",
            body: $"A new task is assigned for you: <b>{task.Title}</b>",
            isBodyHtml: true);}
}
Nous injectons simplement IEmailSender et utilisons la méthode Send. Cette méthode a plusieurs versions surchargées, dont une qui peut accepter les objets MailMessage (elle ne peut pas être utilisée dans .net core car .net core exclut SmtpClient et MailMessage).

ISmtpEmailSender

Il existe également un ISmtpEmailSender, qui étend IEmailSender et ajoute la méthode BuildClient pour créer un SmtpClient, puis vous pouvez utiliser SmtpClient directement (dans le noyau .net Il ne peut pas être utilisé car le noyau .net ne contient pas SmtpClient et MailMessage). Dans la plupart des cas, il suffit d'utiliser ISmtpEmailSender.

NullEmailSender

NullEmailSender est l'implémentation du modèle de conception d'objet Null d'IEmailSender et peut être utilisé dans les tests unitaires et l'injection de dépendances de propriétés.

Configuration

L'envoi d'email utilise le système de gestion des paramètres pour lire la configuration de l'envoi d'email. Les noms de tous les paramètres sont définis dans Abp.Net.Mail sous le formulaire. de constantes. Dans la classe .EmailSettingNames. Voici ses valeurs et descriptions :

  • Abp.Net.Mail.

    DefaultFromAddress : L'adresse par défaut de l'expéditeur de l'e-mail (comme dans l'exemple ci-dessus).

  • Abp.Net.Mail.

    DefaultFromDisplayName : Le nom d'affichage par défaut de l'expéditeur de l'e-mail (comme dans l'exemple ci-dessus).

  • Abp.Net.Mail.

    Smtp.Host : IP ou nom de domaine du serveur SMTP (la valeur par défaut est 127.0.0.1).

  • Abp.Net.Mail.

    Smtp.Port : Le port du serveur SMTP (la valeur par défaut est 25).

  • Abp.Net.Mail.

    Smtp.UserName : Le nom d'utilisateur qui doit être fourni lorsque le serveur SMTP nécessite une authentification.

  • Abp.Net.Mail.

    Smtp.Password : Le mot de passe qui doit être fourni lorsque le serveur SMTP nécessite une authentification.

  • Abp.Net.Mail.

    Smtp.Domain : Le nom de domaine qui doit être fourni lorsque le serveur SMTP nécessite une authentification.

  • Abp.Net.Mail.

    Smtp.EnableSsl : Indique si un serveur SMTP (true) nécessite une connexion SSL (la valeur par défaut est false).

  • Abp.Net.Mail.

    Smtp.UseDefaultCredentials : Lorsque True, utilisez les informations d'identification par défaut au lieu de l'utilisateur et du mot de passe fournis (la valeur par défaut est true).

Intégrer MailKit

Étant donné que le noyau .net ne prend pas en charge le standard System.Net.Mail.SmtpClient, nous avons besoin d'un fournisseur tiers Heureusement, pour envoyer des e-mails, MailKit est une bonne alternative au client Smtp par défaut et Microsoft recommande de l'utiliser.

Le package Abp.MailKit est élégamment intégré au système d'envoi d'e-mails d'Abp, vous pouvez donc toujours utiliser IEmailSender via MailKit comme avant.

Installation

Tout d'abord, installez le package Abp.MailKit dans votre projet :

Install-Package Abp.MailKit

Intégration

Ajoutez une dépendance AbpMailKitModule à votre module :

[DependsOn(typeof(AbpMailKitModule))]public class MyProjectModule : AbpModule
{//...}

Utilisation

Vous pouvez le faire comme décrit avant Utilisez IEmailSender car le package Abp.MailKit enregistre une implémentation MailKit pour celui-ci. Utilise également la configuration définie ci-dessus.

Personnalisation

Lors de la création de SmtpClient de MailKit, vous pouvez avoir une configuration supplémentaire ou votre propre personnalisation. À ce stade, vous pouvez remplacer IMailKitSmtpBuilder par votre propre implémentation L'enregistrement du. L'interface peut être simplifiée en héritant de DefaultMailKitSmtpBuilder. Par exemple, vous souhaitez fournir un identifiant pour toutes les connexions SSL. Dans ce cas, vous pouvez remplacer la méthode ConfigureClient comme suit :

public class MyMailKitSmtpBuilder : DefaultMailKitSmtpBuilder{public MyMailKitSmtpBuilder(ISmtpEmailSenderConfiguration smtpEmailSenderConfiguration) 
        : base(smtpEmailSenderConfiguration)
    {
    }protected override void ConfigureClient(SmtpClient client)
    {client.ServerCertificateValidationCallback = (sender, certificate, chain, errors) => true;        base.ConfigureClient(client);
    }
}
Puis dans votre module Dans la méthode PreInitialize. , remplacez l'implémentation de l'interface IMailKitStmpBuilder par votre implémentation ci-dessus :

[DependsOn(typeof(AbpMailKitModule))]public class MyProjectModule : AbpModule
{public override void PreInitialize()
    {        Configuration.ReplaceService<IMailKitSmtpBuilder, MyMailKitSmtpBuilder>();}//...}
(n'oubliez pas d'ajouter l'instruction "using Abp.Configuration.Startup;", car la méthode d'extension de ReplaceService est défini dans cet espace de noms).

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn