Mailgun è un ottimo strumento per inviare mail e lo posso confermare dopo l’intenso utilizzo dell’ultimo anno. Per questo motivo ho deciso di condividere (in una serie di articoli) la mia libreria e relativa Azure Function per utilizzare al meglio questo servizio.
Link:
Mailgun: Step 0
Come primo passaggio per utilizzare Mailgun dovete andare sul sito, registrarvi e completare la registrazione. La carta di credito dovrà essere inserita anche nel caso di utilizzo del piano free. Se non presente, non verranno inviate mail.
MailGun - Classe per Inviare Mail
Il fulcro del progetto (e della serie di articoli) è la classe MailGunEngine presente nel componente DevAndreaCarrattaIT.MailGun.Lib grazie alla quale possiamo effettuare l’invio delle nostre comunicazioni.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
using RestSharp;
using RestSharp.Authenticators;
using System;
using System.Collections.Generic;
namespace DevAndreaCarrattaIT.MailGun.Lib
{
public class MailGunEngine : IMailGunEngine
{
public string ApiBaseUri { get; set; }
public string ApiKey { get; set; }
public string Domain { get; set; }
public string Expression { get; set; }
public bool AddHeaderNativeSend { get; set; }
public string FromMail { get; set; }
public string FromName { get; set; }
public MailGunEngine()
{
}
public string Send(string Subject, string Text, string BodyHtml, string To, string Cc = null, string Ccn = null)
{
// Nuget : RestSharp
RestClient client = new RestClient();
client.BaseUrl = new Uri(this.ApiBaseUri);
client.Authenticator = new HttpBasicAuthenticator("api", this.ApiKey);
RestRequest request = new RestRequest();
request.AddParameter("domain", this.Domain, ParameterType.UrlSegment);
request.Resource = "{domain}/messages";
request.AddParameter("from", $"{FromName} <{FromMail}>");
if (AddHeaderNativeSend)
{
request.AddParameter("x-mailgun-native-send", true);
request.AddParameter("o:skip-verification", true);
}
if (string.IsNullOrEmpty(this.Expression))
{
request.AddParameter("priority", 0);
request.AddParameter("description", $"Route {Guid.NewGuid()}");
request.AddParameter("expression", this.Expression);
}
request.AddParameter("to", To);
if (string.IsNullOrEmpty(Cc) == false)
{
request.AddParameter("cc", Cc);
}
if (string.IsNullOrEmpty(Ccn) == false)
{
request.AddParameter("ccn", Ccn);
}
request.AddParameter("subject", Subject);
if (string.IsNullOrEmpty(Text) == false)
{
request.AddParameter("text", Text);
}
if (string.IsNullOrEmpty(BodyHtml) == false)
{
request.AddParameter("html", $"<html>{BodyHtml}</html>");
}
request.Method = Method.POST;
var executeResult = client.Execute(request);
string result = executeResult.Content.ToString();
return result;
}
}
}
|
Come avete potuto notare non è molto codice, ma grazie ad esso basterà:
Si potrà effettuare un solo new MailGunEngine ed impostare ApiBaseUri, ApiKey, Domain (ottenuti in fase di registrazione)
Chiamare il metodo Send ogni volta che occorre inviare una mail passando diversi parametri in ingresso.
Il metodo ha un valore di ritorno (string) e contiene l’esito della chiamata a Mailgun
1
2
3
4
5
6
|
{
"id": "<YYYYMMDDHHMMDD.1.XXXXXXXXXXXXXXXX@mg.yyyyyyyyyyy.it>",
"message": "Queued. Thank you."
}
|