2013-12-16 3 views
1

Я могу сделать это легко в php/mysql, однако C# mvc бритва - совсем другая история.csharp schedule email razor mvc4

Все, что я хочу сделать, это установить задание cron на сервере (я предположил, что это не задание cron для C# mvc, даже не знаю, что называется), так что электронное письмо можно отправлять по месяцам: 1mth, 2mths и т. Д.

Ниже приведена моя sendEmail, которая не работает из-за того, что мне нужно включить имя пользователя/пароль в код, чтобы он мог работать, что, на мой взгляд, абсурдно (sendemail in " php "не требует учетных данных отправителей), если нет лучшего способа, пожалуйста, покажите мне путь.

//send email 
public void sendEmail() 
     { 
      MailMessage message = new MailMessage(); 
      message.From = new MailAddress("[email protected]"); 
      message.To.Add(new MailAddress("[email protected]")); 
      message.Subject = "This is my subject"; 
      message.Body = "testing testing testing"; 
      SmtpClient client = new SmtpClient(); 
      client.Host = "localhost"; 
      client.UseDefaultCredentials = false; 
      client.Send(message); 
     } 

//date difference 
public decimal monthDifference(DateTime d1, DateTime d2) 
     { 
      if (d1 > d2) 
      { 
       DateTime hold = d1; 
       d1 = d2; 
       d2 = hold; 
      } 

      decimal monthsApart = Math.Abs((12 * (d1.Year - d2.Year)) + d2.Month - d1.Month - 1); 
      decimal daysinStartingMonth = DateTime.DaysInMonth(d1.Year, d1.Month); 
      monthsApart = monthsApart + (1 - ((d1.Day - 1)/daysinStartingMonth)); 

      decimal daysinEndingMonth = DateTime.DaysInMonth(d2.Year, d2.Month); 
      monthsApart = monthsApart + (d2.Day/daysinEndingMonth); 
      return monthsApart; 
     } 

//i will use linq to query the database and get the start and end date 
if(monthDifference(start, end) == 2 || monthDifference(start, end) == 1) 
{ 
sendEmail(); 
} 

ответ

1

Чтобы отправить электронное письмо по расписанию, вы должны создать консольное приложение и использовать планировщик задач Windows для запуска приложения, когда вам нужно. Если вы не можете использовать планировщик задач Windows, вы можете использовать библиотеку как Quartz.net

Вы можете настроить сервер SMTP с помощью web.config/app.config файл: http://msdn.microsoft.com/en-us/library/w355a94k(v=vs.110).aspx

<configuration> 
    <system.net> 
    <mailSettings> 
     <smtp deliveryMethod="network"> 
     <network 
      host="localhost" 
      port="25" 
      defaultCredentials="true" 
     /> 
     </smtp> 
    </mailSettings> 
    </system.net> 
</configuration> 
3

Вы используете SmtpClient объект, который использует, вы догадались, SMTP.

В PHP/MySQL вы часто используете sendmail, который может отправлять электронные письма с сервера без SMTP-сервера.

Windows не содержит этой функции, и вы всегда должны будете использовать своего рода провайдера ретрансляции почты для отправки электронных писем в мир.

Если вы не хотите хранить имя пользователя и пароль, настройте SMTP-сервер, чтобы он разрешал анонимные подключения с определенных IP-адресов или имен хостов.

Или вы можете сохранить учетные данные для входа SMTP в свой app.config.

Смежные вопросы