У меня есть приложение MVC, и я пытаюсь отправить электронное письмо с помощью Hangfire и Postal. Электронная почта должна быть отправлена после регистрации. Регистрация работает правильно, но работа, которую я выполняю, остается в очереди, и я не получаю никаких сообщений. Так что в моей MVC контроллер У меня есть следующий код:Hangfire background job остается в очереди
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>
Если я бегу замедленное воспламенение приборной панели я вижу задания enqued
Но ничего не произошло. Что мне не хватает, чтобы отправить электронное письмо?
Спасибо
UPDATE В startup.cs я написал это:
var options = new SqlServerStorageOptions
{
QueuePollInterval = TimeSpan.FromSeconds(1)
};
GlobalConfiguration.Configuration
.UseSqlServerStorage("DbConnectionString", options)
.UseFilter(new LogEmailFailureAttribute());
app.UseHangfireDashboard();
app.UseHangfireServer();
UPDATE 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);
}
«Я не могу отладить метод NotifyRegistration. Я не знаю, почему: «Может быть, вы используете более старое состояние файла? – Hristo
Отправляется ли электронное письмо, если вы переместите вызов из работы по борьбе с пожаром? –
@chris, я попытался сделать aclean и перестроить ... ничего .. Я думаю, что я не могу его отладить, потому что это фоновая работа ... или аналогичная – Ciccio