MVC アプリケーションがあり、Hangfire と Postal を使用して電子メールを送信しようとしています。メールは登録後に送信する必要があります。登録は正常に行われますが、実行したジョブがキューに入れられたままになり、メールが届きません。したがって、私の MVC コントローラーには次のコードがあります。
public async Task<ActionResult> Register(RegisterViewModel model)
{
//register correctly the user
//I send the email
BackgroundJob.Enqueue(() =>
NotifyRegistration(user.Id, user.UserName, user.Email)
);
...
}
[AutomaticRetry(Attempts = 5)]
public async Task NotifyRegistration(string userId, string username, string email)
{
//I calculate callbackUrl
var viewsPath = Path.GetFullPath(HostingEnvironment.MapPath(@"~/Views/Emails"));
var engines = new ViewEngineCollection();
engines.Add(new FileSystemRazorViewEngine(viewsPath));
var emailService = new EmailService(engines);
var emailToSend = new NewRegisteredUserEmail
{
To = email, UserName = username, CallbackUrl = callbackUrl
};
emailService.Send(emailToSend);
}
NotifyRegistration メソッドをデバッグできません。どうしてか分かりません。私は Postal を使用しているため、EmailService は私の実装ではありません。ここで、smtp サービスの構成方法を示します。
<system.net>
<mailSettings>
<smtp deliveryMethod="Network">
<network host="smtp.live.com" port="25" enableSsl="true" userName="***" password="***"></network>
</smtp>
</mailSettings>
</system.net>
hangfire ダッシュボードを実行すると、キューに入れられたジョブが表示されます
しかし、他に何も起こりませんでした。電子メールを送信するのに何が欠けていますか?
ありがとうございました
更新 startup.cs で、私はこれを書きました:
var options = new SqlServerStorageOptions
{
QueuePollInterval = TimeSpan.FromSeconds(1)
};
GlobalConfiguration.Configuration
.UseSqlServerStorage("DbConnectionString", options)
.UseFilter(new LogEmailFailureAttribute());
app.UseHangfireDashboard();
app.UseHangfireServer();
更新 2 NotifyRegistration を次のように変換しました。
[AutomaticRetry(Attempts = 5)]
public async Task NotifyRegistration(string userId, string username, string email, EmailService emailService)
{
//I calculate callbackUrl
var emailToSend = new NewRegisteredUserEmail
{
To = email, UserName = username, CallbackUrl = callbackUrl
};
emailService.Send(emailToSend);
}