Всем привет,
В середине декабря на работе было много задач по GPS трекерам, в ходе решения этих задач, пришло понимание, что для оптимизации работы и обслуживания трекеров, нужно специализированное ПО, немного подумав решил сделать софт сам. Один из модулей должен будет формировать сервисную заявку монтажникам, через email.
Вот тут я подумал, а может быть кому то еще интересно как это можно сделать, т.к. по факту это та же форма обратной связи, которая есть почти на каждом сайте, почему бы такую форму ни прикрутить к программе для возможности пользователя влиять на развитие софта.
Кому лень читать, могут сразу скачать готовый проект [download-attachment id=»277″ title=»WinForm_Feedback»]
Короче, поехали.
1)Для начала создадим проект, например, WinForm.
2) Даем ему название Feedback.
3) Кидаем на форму 3 textBox: Первый будет имя автора письма, второй для тема письма, третий для тела письма.
4) Даем им соответствующие имена: textBoxName, textBoxSubject и textBoxBody.
5) Еще добавляем кнопку, для отправки, в св-во Title прописываем «Отправить», в Name «buttonSubmit».
В итоге у вас должна получить вот такая форма:
Теперь код,
6) Создаем отдельный класс
7) Даем название SendMail.cs
В открывшемся редакторе кода, для начала подключим два нужных нам пространства имен: System.Net и System.Net.Mail
Теперь переходим в сам класс.
8) Создаем закрытую строковую переменную bodyMail, nameAuthor и subject.
9) Теперь создаем конструктор, в который будут передаваться имя автора, тему и сообщение.
10) Теперь нам нужно 2 почтовых ящика, 1 ящик должен быть наш «Личный», а второй мы будет использовать для «Отправки сообщений». В итоге получится, что при отправке сообщения через форму, это сообщение будет передаваться на «личный» ящик через ящик для «отправки сообщений».
11) После конструктора добавляем метод MySendMail, в нем будет происходить основное: отправка сообщения.
12) В нем создаем 2 экземпляра класса MailAdress, один нужен для «личного» ящика, второй для «отправки сообщения».
Чуть не забыл, нам нужно еще одна переменная, которая будет содержать в себе пароль для ящика «Отправка сообщений», хотя т.к. пароль не будет менять сделаем вместо переменной константу и добавим ее после переменной subject, теперь код выглядит так:
13) Создаем экземпляр класса SmtpClient, предаем ему адрес smtp сервера и порт, в моем случаи это mail.ru:
SmtpClient smtp = new SmtpClient("smtp.mail.ru", 25);
14) Теперь указываем что обращение к smtp серверу будет осуществлять по сети:
smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
15) Теперь, передаем параметры доступа(логин,пароль) к ящику «Отправки сообщения»:
smtp.Credentials = new NetworkCredential(from.Address, passMail);
16) Указываем, что сообщение нужно шифровать:
smtp.EnableSsl = true;
17) Также ставить время за которое должна пройди операция, если за указанное время операция не завершена, то выкидывать ошибку:
smtp.Timeout = 20000;
18) Теперь формируем само сообщение, для этого используется класс MailMessage, передаем к качестве параметров: с какого ящика нужно отправить и на какой доставить:
MailMessage mail = new MailMessage(from, to);
19) Также добавляем, тему и тело в сообщение:
mail.Subject = subject; mail.Body = bodyMail;
20) Теперь отправляем сообщение на smtp сервер:
smtp.Send(mail);
21) Еще добавим уведомление:
MessageBox.Show("Сообщение доставлено!", "Информационное письмо", MessageBoxButtons.OK, MessageBoxIcon.Information);
В этом блоке всё!!!
22) В блок catch добавим:
MessageBox.Show(ex.ToString(), "Ошибка отправки", MessageBoxButtons.OK, MessageBoxIcon.Error);
Код должен выглядеть так:
23) Теперь прикручиваем к кнопке вызов метода MySendMail(), так:
24) Можно проверять. Компилируем:
25) Нажимаем отправить и проверяем почту:
Если понравилось, ставь лайк.
Отличный пример. Сегодня вставлю в свойт дипломный проект. Как доп функция.
Еще бы пример работы с notifyIcon. Запуск, перезапуск программы через иконку в трее. )))
Проверил. Данный метод работает. Правдо не понятно как он будет работать при отправке с почтовых ящиков Яндекса или гугла . Там вроде есть свои ньюансы. А Так метод отличный. Для отправки логов, журналов работ,, обратной связи и тому подобного.
Почтовый ящик недоступен. Отклик сервера: not local sender over smtp
Приветствую, скиньте пожалуйста скриншот ошибки сюда rabota683@gmail.com
Сделал все так же , но при отправки появляется «ошибка отправки»
Приветствую,
скиньте, описание ошибки сюда rabota683@gmail.com, посмотрю, отпишу.