Net Core отправляет фоновую электронную почту с помощью Postal и HangfireC#

Место общения программистов C#
Ответить
Anonymous
 Net Core отправляет фоновую электронную почту с помощью Postal и Hangfire

Сообщение Anonymous »

Я пытаюсь отправлять электронные письма с помощью Hangfire и Postal, но у меня проблемы с HTTPContext. Если я выполняю стрельбу через контроллер, отправка осуществляется без проблем, теперь, если я выполняю задание через Hangfire, генерируется ожидание.
Код start.cs

Код: Выделить всё

public void ConfigureServices(IServiceCollection services)
{
services.AddHangfire(configuration => configuration
.SetDataCompatibilityLevel(CompatibilityLevel.Version_170)
.UseSimpleAssemblyNameTypeSerializer()
.UseRecommendedSerializerSettings()
.UseSqlServerStorage(Configuration.GetConnectionString("default"), new SqlServerStorageOptions
{
CommandBatchMaxTimeout = TimeSpan.FromMinutes(5),
SlidingInvisibilityTimeout = TimeSpan.FromMinutes(5),
QueuePollInterval = TimeSpan.Zero,
UseRecommendedIsolationLevel = true,
UsePageLocksOnDequeue = true,
DisableGlobalLocks = true
}));

services.Configure(Configuration.GetSection("EmailSender"));
services.AddPostal();
services.AddTransient();
services.AddHttpContextAccessor();
services.AddSingleton();
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
var options = new DashboardOptions
{
Authorization = new[] { new HangFireAuthorizationFilter() }
};

app.UseHangfireDashboard("/hangfire", options);
app.UseHangfireServer();

RecurringJob.AddOrUpdate("SendNotify-", m => m.Notify(1), Cron.Daily);
}
Код NotificationServices.cs

Код: Выделить всё

public class NotificationServices
{
private readonly IEmailSenderEnhance _emailSender;
private readonly Config _appConfig;
private readonly IHttpContextAccessor _httpContextAccessor;

public NotificationServices(IEmailSenderEnhance emailSender, IOptions optionsAccessor, IHttpContextAccessor httpContextAccessor)
{
_emailSender = emailSender;
if (optionsAccessor == null) throw new ArgumentNullException(nameof(optionsAccessor));
_appConfig = optionsAccessor.Value;
_httpContextAccessor = httpContextAccessor;
}

public void Notify(int messageId)
{
var listOSs = Task.Run(async () => await this.SendEmail(messageId));
}

public async Task SendEmail(int orderID)
{
var orderRy = new OrderRepository();
var order = orderRy.Get_By_ID(orderID);

try
{
var requestPath = new Postal.RequestPath
{
PathBase = _httpContextAccessor.HttpContext.Request.PathBase.ToString(),
Host = _httpContextAccessor.HttpContext.Request.Host.ToString(),
IsHttps = _httpContextAccessor.HttpContext.Request.IsHttps,
Scheme = _httpContextAccessor.HttpContext.Request.Scheme,
Method = _httpContextAccessor.HttpContext.Request.Method
};

var emailData = new Postal.Email("SendTest")
{
RequestPath = requestPath,
};

var emailsCopy = $"{order.Salesman.Email},{order.Salesman2.Email},";

emailData.ViewData["to"] = emailsCopy;
emailData.ViewData["Order"] = order;

await _emailSender.SendEmailAsync(emailData);
}
catch (Exception ex)
{

}
}
}
Ошибка в HttpContext:
_httpContextAccessor.HttpContext.Request.PathBase.ToString()
Можно ли отправлять электронные письма в фоновом режиме с помощью Postal?>

Подробнее здесь: https://stackoverflow.com/questions/647 ... d-hangfire
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»