9
votes

Mon code ASP.NET peut-il obtenir une confirmation de SENDGRID qu'un email a été envoyé?

J'ai ce code que j'utilise dans ma candidature:

    public async Task<IHttpActionResult> Register(RegisterBindingModel model)
    {

        var user = new ApplicationUser()
        {
            Email = model.Email,
            FirstName = model.FirstName,
            LastName = model.LastName,
            RoleId = (int)ERole.Student,
            UserName = model.UserName
        };
        var result = await UserManager.CreateAsync(user, model.Password);
        if (result.Succeeded)
        {
            var code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id);
            var callbackUrl = model.Server +
                              "/index.html" +
                              "?load=confirmEmail" +
                              "&userId=" + user.Id +
                              "&code=" + HttpUtility.UrlEncode(code);
            await UserManager.SendEmailAsync(user.Id, "Confirm your account", "Please confirm your account by clicking this link: <a href=\"" + callbackUrl + "\">link</a>");
        }
        if (!result.Succeeded)
        {
            return GetErrorResult(result);
        }
        return Ok();

    }


0 commentaires

3 Réponses :


-1
votes

Je ne pense pas que SendGrid est configuré pour donner une réponse. Cependant, en tant que pirate de hack, vous pouvez vous avertir de vous-même (et donc savoir au moins un courrier électronique est sorti) en ajoutant le code suivant à votre classe CONFIGSENDGRIDASYNC xxx

espère que cela aide! < / p>


0 commentaires

5
votes

Vous voudrez utiliser webhooks pour obtenir la confirmation envoyé à vous pour confirmer le message été livré au destinataire.

Vous auriez besoin de configurer une page pour accepter des événements de SendGrid, tels que: p>

https://yourdomaine.com/email/hook qui accepterait JSON que vous feriez alors traiter avec votre choix. Le JSON.NET Documentation serait en mesure de vous guider sur la manière d'accepter JSON, puis de la transformer en un objet que vous pouvez utiliser.

Exemple JSON Vous seriez Publié: P>

{
    "sg_message_id":"sendgrid_internal_message_id",
    "email": "john.doe@sendgrid.com",
    "timestamp": 1337197600,
    "smtp-id": "<4FB4041F.6080505@sendgrid.com>",
    "event": "delivered"
  },


2 commentaires

Je vais attendre un moment et examinez toutes les réponses et acceptez celui qui explique le mieux pour tout le monde. Merci beaucoup d'avoir pris le temps de répondre à la question.


Comment associer le webhook avec ce que j'ai envoyé? Quand j'ai envoyé le courrier, il n'y a pas de SG_MESSGE_ID comme réponse pour que je garde et correspond à votre retour webhook.



11
votes

Les courriels envoyés via l'API Web SendGrid sont asynchrones, afin d'obtenir une confirmation, vous devez mettre en œuvre une webhook. Le webhook postera des événements de votre choix à une URL que vous définissez. Dans ce cas, vous êtes intéressé par l'événement "livré".

Vous aurez besoin du code de votre serveur pour gérer le webhook entrant et effectuer une logique basée sur les résultats, tels que les événements livrés de la journalisation. Il y a quelques bibliothèques contribuées à la communauté qui vous permet de créer facilement un gestionnaire WebHook. Je suggère SendGrid-webhooks , qui est disponible sur Nuget. P>

puis prenez le post entrant et la main à l'analyseur d'obtenir un objet retour. p>

puisque vous utilisez ASP.NET MVC, vous pouvez utiliser un [httppost] code> méthode à l'intérieur d'un contrôleur pour recevoir le poste. Données de SendGrid. Ensuite, vous pouvez l'analyser avec SendGrid-webhooks. P>

du SendGrid-webhooks README : P>

var parser = new WebhookParser();
var events = parser.ParseEvents(json);

var webhookEvent = events[0];

//shared base properties
webhookEvent.EventType; //Enum - type of the event as enum
webhookEvent.Categories; //IList<string> - list of categories assigned ot the event
webhookEvent.TimeStamp; //DateTime - datetime of the event converted from unix time
webhookEvent.UniqueParameters; //IDictionary<string, string> - map of key-value unique parameters

//event specific properties
var clickEvent = webhookEvent as ClickEvent; //cast to the parent based on EventType
clickEvent.Url; //string - url on what the user has clicked


1 commentaires

Merci beaucoup. Génial d'avoir de l'aide de quelqu'un qui travaille à Sendgrid. Je vais attendre un moment, tester votre solution et vous faire savoir si j'ai des questions.