Ich habe einen On-Demand-Azure-Webjob, der als Konsolenanwendung ausgeführt wird.Sendgrid sendet keine E-Mails in einem On-Demand-Azure-Webjob, der als Konsolenanwendung ausgeführt wird.
Ziel ist E-Mails an Kunden senden.
Problem ist es keine E-Mails senden.
Mein Code ist schwer angehoben von msdn Abschnitt Wie: Senden Sie eine E-Mail. Folgendes ist mein Code-Snippet.
class Program
{
static void Main(string[] args)
{
Execute(Environment.GetEnvironmentVariable("WEBJOBS_COMMAND_ARGUMENTS")).Wait();
}
static async Task Execute(string email)
{
DeserializedCustomer customer = JsonConvert.DeserializeObject<DeserializedCustomer>(email);
var apiKey = Environment.GetEnvironmentVariable("SENDGRID_APIKEY");
var client = new SendGridClient(apiKey);
SendGridMessage msg = new SendGridMessage()
{
From = new EmailAddress(customer.Email, "From Email"),
Subject = $"Inquiry by - {customer.FirstName} {customer.LastName}",
PlainTextContent = customer.Comments + Environment.NewLine + $"Phone : {customer.Phone}",
};
msg.AddTo(new EmailAddress(ToMail, ToMailName));
if (!String.IsNullOrWhiteSpace(customer.Attachment))
{
List<Attachment> attachments = new List<Attachment>()
{
new Attachment()
{
Content = customer.Attachment,
Type = customer.AttachmentType,
Filename = customer.AttachmentFileName,
Disposition = "inline",
ContentId = customer.AttachmentFileName + Guid.NewGuid()
}
};
msg.Attachments = attachments;
}
await client.SendEmailAsync(msg);
}
}
suche ich ein SO post wo gibt Zeit zu senden E-Mail in einer Konsolenanwendung
Hinzufügen Zeit nicht helfen entweder sendgrid gefunden.
Wenn es etwas eigenartig ist, E-Mails von azurblauen Webjobs zu versenden, die als Konsolenanwendungen laufen, dann weiß ich es nicht.
Bei der weiteren Suche fand ich this SO Post, wo sie erfolgreich getestet E-Mails in der Konsolenanwendung, so dass ich dachte, es könnte helfen, aber es hat keine E-Mails gesendet.
Alle oben genannten Beispiele sind mehr als ein Jahr alt und keiner von ihnen funktioniert derzeit.
Ich habe versucht, eine frühere Version von SendGrid Bibliothek, aber ich bin auf
var transportWeb = new Web(credentials);
transportWeb.DeliverAsync(myMessage);
als SendGrid stecken Bibliothek aktualisiert wurde.
auf GitHub fand ich this dem eindeutig hervorgeht, dass nur Konsolenanwendungen mit transportWeb.DeliverAsync(myMessage).Wait
arbeiten
deshalb versuche ich mit transportWeb.
Gibt es eine Verschmelzung von azurblauen mit On-Demand-Web-Job läuft als Konsole-Anwendung?
Kann jemand helfen?
aktualisieren
Nachdem ich Randy Minder Hilfe den Code der folgenden
aktualisiert static async Task Execute(string email)
{
try
{
DeserializedCustomer customer = new DeserializedCustomer();
customer = JsonConvert.DeserializeObject<DeserializedCustomer>(email);
Console.WriteLine(customer);
SendGridMessage msg = new SendGridMessage();
msg.From = new MailAddress(customer.EmailAddress, "From Email");
msg.Subject = $"Inquiry by - {customer.FirstName} {customer.LastName}";
msg.Text = customer.Comments + Environment.NewLine + $"Phone : {customer.Phone}";
msg.AddTo(ToMail);
// Create a network credentials object
var credentials = new NetworkCredential(Environment.GetEnvironmentVariable("UserName"), Environment.GetEnvironmentVariable("Password"));
var transportWeb = new SendGrid.Web(credentials);
transportWeb.DeliverAsync(msg).Wait();
}
catch (Exception ex)
{
DateTime now = DateTime.Now;
Trace.TraceError($"{now.ToLongDateString()} {now.ToLongTimeString()}" + Environment.NewLine + new ExceptionSerializer(ex));
}
}
Ich verwende SendGrid 6.1.0
<package id="Sendgrid" version="6.1.0" targetFramework="net47" />
Ich habe nicht jede Ausnahme und mein Webjob läuft zum Erfolg
[09/06/2017 17:48:42 > 1a8d37: SYS INFO] Run script 'SaSRizqTechCloudWhizEngineering.Backgr.exe' with script host - 'WindowsScriptHost'
[09/06/2017 17:48:42 > 1a8d37: SYS INFO] Status changed to Running
[09/06/2017 17:48:42 > 1a8d37: INFO] SerializedEmail - {"FirstName":"adsfkh","LastName":"adfkjladf","EmailAddress":"[email protected]","Phone":"","Comments":"lkjadf ","AttachmentType":"","AttachmentFileName":"","Attachment":null}
[09/06/2017 17:48:42 > 1a8d37: INFO] FirstName adsfkh - LastName adfkjladf - EmailAddress [email protected] - Phone - Comments lkjadf - Attachment - AttachmentType - - AttachmentFileName
[09/06/2017 17:48:44 > 1a8d37: SYS INFO] Status changed to Success
aber ich keine E-Mail
, welche Version von SendGrid Nuget Paket verwenden Sie? Die neueste Version enthält keine Definition für var transportWeb = new Web (credentials); –
Sind Sie sicher, dass var credentials = new NetworkCredential (azureUserName, azurePassword); im azurblauen Webjob? Die neueste Dokumentation schlägt vor, var apiKey = Environment.GetEnvironmentVariable ("SENDGRID_APIKEY") zu verwenden; –
@ HamzaAhmedZia - Ganz sicher. Ich habe dies im Produktionscode ausgeführt. Die Version von SendGrid, die ich verwende, ist 4.0.30319 (Runtime) wie in den Eigenschaften gezeigt. Es gibt auch ein Feld Version, das 6.1.0.0 enthält. –