Насколько мне известно, и вопреки тому, что сказал Норман, потоковое слияние - это , а не , реализованное в настоящее время в базе GHC (т. е. вы не можете просто использовать функции Prelude). Для получения дополнительной информации см. билет GHC 915 .
Чтобы использовать потоковое слияние, вам необходимо установить библиотеку потокового фьюжн, импортировать Data.List.Stream (вы также можете импортировать Control.Monad .Stream) и использовать только функции из этого модуля, а не функции Prelude. Это означает, что Prelude скрывает все функции списка по умолчанию и не использует конструкцию [x..y] или понимание списка.
Обязательно используйте System.Net.Mail
, не устаревшее System.Web.Mail
. Выполнение SSL с System.Web.Mail
является грубой путаницей hacky расширений.
using System.Net;
using System.Net.Mail;
var fromAddress = new MailAddress("from@gmail.com", "From Name");
var toAddress = new MailAddress("to@example.com", "To Name");
const string fromPassword = "fromPassword";
const string subject = "Subject";
const string body = "Body";
var smtp = new SmtpClient
{
Host = "smtp.gmail.com",
Port = 587,
EnableSsl = true,
DeliveryMethod = SmtpDeliveryMethod.Network,
UseDefaultCredentials = false,
Credentials = new NetworkCredential(fromAddress.Address, fromPassword)
};
using (var message = new MailMessage(fromAddress, toAddress)
{
Subject = subject,
Body = body
})
{
smtp.Send(message);
}
Вышеупомянутый ответ не работает. Необходимо установить DeliveryMethod = SmtpDeliveryMethod.Network
, или это возвратится с" , клиент не аутентифицировался " ошибка. Также это всегда - хорошая идея поместить тайм-аут.
Пересмотренный код:
using System.Net.Mail;
using System.Net;
var fromAddress = new MailAddress("from@gmail.com", "From Name");
var toAddress = new MailAddress("to@yahoo.com", "To Name");
const string fromPassword = "password";
const string subject = "test";
const string body = "Hey now!!";
var smtp = new SmtpClient
{
Host = "smtp.gmail.com",
Port = 587,
EnableSsl = true,
DeliveryMethod = SmtpDeliveryMethod.Network,
Credentials = new NetworkCredential(fromAddress.Address, fromPassword),
Timeout = 20000
};
using (var message = new MailMessage(fromAddress, toAddress)
{
Subject = subject,
Body = body
})
{
smtp.Send(message);
}