Почтовый клиент (SMTP) - C#
Формулировка задачи:
Написал код почтового клиента, но отправки писем так и не добился.
Пробовал и с яндекса и с рамблера - результат тот же.
Может кто сталкивался с такой же проблемой.
А если есть рабочий вариант отправки (для рамблера или яндекса) то большая просьба выложить.
Примеры я конечно всяко разно видел, но вроде там все так же, однако у меня в чем то накладка.
Через секунд 30 после отправки письма получаю через коллбек на отправку такой вот мессидж:
System.Net.Mail.SmtpException: Сбой при отправке сообщения электронной почты. ---> System.Net.WebException: Невозможно соединиться с удаленным сервером ---> System.Net.Sockets.SocketException: Попытка установить соединение была безуспешной, т.к. от другого компьютера за требуемое время не получен нужный отклик, или было разорвано уже установленное соединение из-за неверного отклика уже подключенного компьютера 81.19.70.48:25
в System.Net.Sockets.Socket.EndConnect(IAsyncResult asyncResult)
в System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state, IAsyncResult asyncResult, Int32 timeout, Exception& exception)
--- Конец трассировки внутреннего стека исключений ---
в System.Net.Mail.SmtpConnection.ConnectAndHandshakeAsyncResult.End(IAsyncResult result)
в System.Net.Mail.SmtpClient.ConnectCallback(IAsyncResult result)
--- Конец трассировки внутреннего стека исключений ---
Есть ошибка в моем коде? Или тут дело в чем то другом?
namespace MailClient { public partial class Window1 : Window { RegistryKey newkey; RegistryKey newkey2; RegistryKey newkey3; Attachment data; SmtpClient client; OpenFileDialog OpenFile = new OpenFileDialog(); //static bool MailSend = false; public Window1() { InitializeComponent(); //коллбек на открытие меню выбора файлов OpenFile.FileOk += new System.ComponentModel.CancelEventHandler(this.OpenFileOk); } //коллбек на отправку почты private static void SendCompletedCallback(object sender, AsyncCompletedEventArgs e) { String token = (string)e.UserState; if (e.Cancelled) { MessageBox.Show("[{0}] Отправка отменена.", token); } if (e.Error != null) { MessageBox.Show(e.Error.ToString()); StreamWriter log = new StreamWriter("D:\\log.doc"); log.Write(e.Error.ToString()); log.Close(); } else { MessageBox.Show("Сообщение успешно отправлено"); } } //собственно сам отправка public void mail() { //задает уровень доступа: надо не надо - хрен его знает... SmtpPermission connectAccess = new SmtpPermission(SmtpAccess.Connect); string Header = Thema.Text; //заголовок string Mail = TextMessage.Text; //письмо string FromAdress = MyAdress.Text; //адрес отправителя string ToAdress = Adress.Text; //адрес получателя string file = Attach.Text; //прикрепленный файл string password = Password.Text; //пароль на почтовом сервере string login = Login.Text; //логин на почтовом серевере if (Header == "") { Header = "Без темы"; } //string host = Dns.GetHostName(); //IPAddress[] ips = Dns.GetHostAddresses(host); if (ToAdress == "") { MessageBox.Show("Введите адрес"); return; } if (Mail == "") { MessageBox.Show("Введите текст"); return; } Write_Key(Header,ToAdress, FromAdress, password, login); client = new SmtpClient("smtp.rambler.ru", 25); //client.Timeout = 100000; //авторизация на своем почтовом сервере client.Credentials = new NetworkCredential(login, password); //client.EnableSsl = true; не обязательно //вот это не знаю как правильно интерпретировать и что собственно дают //client.Credentials = CredentialCache.DefaultNetworkCredentials; //client.UseDefaultCredentials = true; //адреса - от кого кому MailAddress from = new MailAddress(FromAdress); MailAddress to = new MailAddress(ToAdress); MailMessage message = new MailMessage(from, to); message.Subject = Header; message.Body = Mail; message.SubjectEncoding = System.Text.Encoding.UTF8; message.BodyEncoding = System.Text.Encoding.UTF8; //обработчик успешной отправки client.SendCompleted += new SendCompletedEventHandler(SendCompletedCallback); //вложения if (file != "") { data = new Attachment(file, MediaTypeNames.Application.Octet); ContentDisposition disposition = data.ContentDisposition; disposition.CreationDate = System.IO.File.GetCreationTime(file); disposition.ModificationDate = System.IO.File.GetLastWriteTime(file); disposition.ReadDate = System.IO.File.GetLastAccessTime(file); message.Attachments.Add(data); } //отправляем сообщение //исключение теперь здесь не ловится так как стоит коллбек на отправку try { client.SendAsync(message,"test"); } catch (SmtpException ex) { MessageBox.Show(String.Format("Базовая ошибка: {0} Статус кода: {1}", ex.GetBaseException().ToString(), ex.StatusCode.ToString())); StreamWriter log2 = new StreamWriter("D:\\log.doc"); log2.Write(ex.GetBaseException().ToString()); log2.Close(); } //освобождаем ресурсы message.Dispose(); }
Так-c... никто значит не знает.
Причину я нашел - провайдер мой зараза оказывается 25 порт заблокировал и видимо не только его.
587 и 465 (юзаются smtp серверами gmail.com) тоже не пашут.
А других портов я не знаю.
Остается только юзать почтовый сервис провайдера.
Решение задачи: «Почтовый клиент (SMTP)»
textual
Листинг программы
client = new SmtpClient("smtp.rambler.ru")
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д