Останнє оновлення: 31.10.2015
Для надсилання пошти в Інтернеті використовується протокол SMTP (Simple Mail Transfer Protocol). Цей протокол вказує, як поштові сервери взаємодіють під час передачі електронної пошти.
Для роботи з протоколом SMTP та надсилання електронної пошти в .NET призначений клас SmtpClient із простору імен System.Net.Mail.
Цей клас визначає низку властивостей, які дозволяють налаштувати відправлення:
Host: smtp-сервер, з якого здійснюється відправлення пошти. Наприклад, smtp.yandex.ru
Port: порт, який використовується smp-сервером. Якщо не вказано, за замовчуванням використовується 25 порт.
Credentials: автентифікаційні дані відправника
EnableSsl: вказує, чи буде використовуватися протокол SSL під час надсилання
Ще одним ключовим класом, який використовується при надсиланні, є MailMessage . Даний клас є повідомленням, що надсилається. Серед його властивостей можна виділити такі:
Attachments: містить всі прикріплення до письма
Body: безпосередньо текст листа
Від: адреса відправника. Представляє об'єкт MailAddress
To: адреса одержувача. Також представляє об'єкт MailAddress
Subject: визначає тему листа
IsBodyHtml: вказує, чи подає лист вміст із кодом html
Використовуємо ці класи та виконаємо відправку листа:
Using System; using System.Net; using System.IO; використовуючи System.Threading.Tasks; using System.Net.Mail; namespace NetConsoleApp (class Program (static void Main(string args)) ( // відправник - встановлюємо адресу і ім'я, що відображається в листі MailAddress from = new MailAddress(" [email protected]", "Tom"); // кому відправляємо MailAddress to = new MailAddress(" [email protected]"); // створюємо об'єкт повідомлення MailMessage m = new MailMessage(from, to); // тема листа m.Subject = "Тест"; // текст листа m.Body = "
Лист-тест роботи smtp-клієнта
// лист представляє код html m.IsBodyHtml = true; // адресу smtp-сервера і порт, з якого будемо відправляти лист SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587); smtp.Credentials = новий NetworkCredential(" [email protected]", "mypassword"); smtp.EnableSsl = true; smtp.Send(m); Console.Read(); ) ) )Для відправки застосовується метод Send() , який передається об'єкт MailMessage.
Також ми можемо використовувати асинхронну версію надсилання за допомогою методу SendMailAsync:
Using System; using System.Net; using System.IO; використовуючи System.Threading.Tasks; using System.Net.Mail; namespace NetConsoleApp ( class Program ( static void Main(string args) ( SendEmailAsync().GetAwaiter(); Console.Read(); ) private static async Task SendEmailAsync() ( MailAddress from = new MailAddress(" [email protected]", "Tom"); MailAddress to = new MailAddress(" [email protected]"); MailMessage m = новий MailMessage(from, to); m.Subject = "Тест"; m.Body = "Лист-тест 2 роботи smtp-клієнта"; SmtpClient smtp = новий SmtpClient("smtp.gmail.com" , 587);smtp.Credentials = новий NetworkCredential(" [email protected]", "mypassword"); smtp.EnableSsl = true; await smtp.SendMailAsync(m); Console.WriteLine("Лист відправлений");
Додавання вкладень
До листа ми можемо прикріпити вкладення за допомогою властивості Attachments. Кожне вкладення представляє об'єкт System.Net.Mail.Attachment:
MailAddress from = new MailAddress(" [email protected]", "Tom"); MailAddress to = new MailAddress(" [email protected]"); MailMessage m = новий MailMessage(from, to);
Надсилання повідомлень на пошту в Visual Studio 2013 C++
Здавалося б, навіщо винаходити велосипед? Є безліч програм, які можуть надсилати листи на електронну пошту: як платні, так і безкоштовні. У цих програмах можна надсилати листи не одному, а відразу багатьом отримувачам. Однак, все ж таки додавання одержувачів відбувається вручну, адреси їх вбивати мотузно, особливо якщо їх не один десяток. А якщо потрібно регулярно надсилати сотні листів? Причому я не говорю про спам, а маю на увазі легальні розсилки?
У цьому випадку допоможе може прийти спеціальна програма. У цій статті не буде такої цілої програми, а буде невелика програма, яка просто надсилає один лист на одну адресу. При цьому відбувається авторизація по smpt, тобто лист відправляється не від невідомо звідки, а з цілком реальної поштової скриньки. У прикладі використається пошта mail.ru.
Отже, текст програми.
#include "stdafx.h" #using
З 1-ї по 8-му рядки йде підключення заголовних файлів та простору імен. 13 рядок ініціалізує smpt-сервер. Для яндексу та гугла використовуються свої: smtp.yandex.ru та smtp.google.ru відповідно. Число 25 у цьому рядку - це порт. У тому випадку, якщо ваш провайдер блокує цей порт або не вдається з'єднатися, то можна спробувати такі варіанти 465 або 587. У 14 рядку необхідно ввести свою скриньку електронної пошти (з якої піде лист) та пароль від цієї скриньки.
Особливу увагу звертаємо на 15 рядок - до цього підключається безпечний протокол ssl. Це обов'язково потрібно для яндекса і майла. 17 рядок створює повідомлення; о 18 - зворотна адреса; о 19 - адреса одержувача; 20 - заголовок листа; 21 - повідомлення; у 22 рядку провадиться відправка. Якщо після запуску програми не вискакує жодних помилок, нічого не відбувається, то все нормально – перевіряйте скриньку одержувача.
Якщо у вас є хоч якісь невеликі навички програмування, то зробити все інше буде зовсім нескладно. Треба створити вікно, форму, у вигляді кілька полів введення, змусити програму підвантажувати список адрес з, наприклад, текстового фала чи бази MS Access. Якщо ж вам це ще не зовсім зрозуміло, то в наступних статтях я розповім про все докладніше.
Будь-які питання щодо програм на C++, java, скриптів на java script та php, створення сайтів та верстки, ви можете задати поштою [email protected]або стукайтеся у скайп up777up2. За дуже помірну платню я вам із задоволенням допоможу.
Доповнення
Один із відвідувачів блогу запитав: а як прикріпити файл у цій програмі? Відповідь проста: треба додати кілька рядків коду в додаток:
String^ att = L"att.xls"; Attachment^ dan = gcnew Attachment(att, MediaTypeNames::Application::Octet); Message->Attachments->Add(dan); У першому рядку визначаємо файл, що прикріплюється, у другому визначаємо дані і наказуємо не інтерпретувати їх (заголовок Content-Type протоколу MIME) і в третьому - додаємо його до листа. От і все.
містер Олімпія 14 жовтня 2013 року о 19:29Програмне відправлення email, використовуючи різні сервіси
- .NET ,
Дуже часто доводиться стикатися з надсиланням електронних листів із програмного коду. За прикладами далеко не треба ходити.
Ця стаття є підказкою і не відкриває нічого нового, але перед тим, як її писати, подивився схоже в інтернеті і був досить здивований тому, що майже скрізь пропонують або не працююче або застаріле рішення, або просто написано неписьменно.
Перше, що не варто робити за цими прикладами – це використовувати System.Web.Mail, який вже давно застарів, а починаючи з Visual Studio 2010 бібліотеку System.Web навіть не додати, не знаючи повного шляху до відповідної DLL.
Замість цього пропонується використовувати бібліотеку System.Net.
using System.Net; using System.Net.Mail;
Отже, найпростіше, воно ж найважливіше і найчастіше використовується - це відправка листа зі свого поштового сервера, на якому налаштований SMTP-клієнт. Як ви розумієте, сервер може бути як і той, на якому працює додаток, так і віддалений, на якому ви маєте право надсилати листи без додаткової авторизації.
Приклад коду для надсилання листа з локальної машини:
За допомогою поштових служб, таких як Gmail, Yandex, Mail.ru і т.д. все те саме, тільки додаються параметри з авторизацією.
SMTP-сервер: smtp.gmail.com
Порт: 587
using (MailMessage mm = новий MailMessage("Name
SMTP-сервер: smtp.yandex.ru
Порт: 25
using (MailMessage mm = новий MailMessage("Name
SMTP-сервер: smtp.mail.ru
Порт: 25
using (MailMessage mm = новий MailMessage("Name
Якщо у вас Поштова скринькана сервісі mail.ru закінчується на inbox.ru, list.ru або bk.ru, відповідно змінюється і адреса SMTP-сервера (smtp.inbox.ru, smtp.list.ru і smtp.bk.ru).
Як ви бачите, щоб використовувати будь-який інший поштовий сервіс у ваших програмах, необхідно тільки з'ясувати адресу SMTP-сервера і порт, а також правила авторизації.
Необхідно також пам'ятати, що практично всі сторонні поштові послуги накладають ліміти на кількість надісланих листів у період часу.
email, відправка листів, smtp
Вітаю. Оскільки графоманія у мене прогресує, вирішив додати ще одну статтю. Стаття буде, як завжди, з прикладами на C#, але більш-менш умілий VB"шник з легкістю перепише весь код під VB.NET.
Почнемо, мабуть
Для надсилання електронної пошти нам потрібно скористатися трьома об'єктами. System.Net.Mail.SmtpClient для надсилання повідомлення, System.Net.Mail.MailMessage для представлення повідомлення, і System.Net.NetworkCredential для авторизації.
Створимо клієнт:
Var client = новий SmtpClient("$Mail-Server-Address$", $Mail-Server-Port$);
Референція конструктора:
SmtpClient(string host, int port);
Створимо екземпляр класу MailMessage:
Var msg = новий MailMessage("from", "to");
Тепер поставимо тему і вміст листа (до речі, все можна поставити і в конструкторі). А також логін та пароль smtp-клієнту. Потім відправимо лист методом Send нашого об'єкта client:
Var client = New SmtpClient("smtp.yandex.ru"); var msg = новий MailMessage("from", "to"); msg.Subject = "My test message"; msg.Body = "Hello, мій хлопець! Just imagine, що я хотів повідомити про бездоганний program для того, щоб скористатися нею літературою, щоб ви billion times only by several clicks!"; msg.SubjectEncoding = Encoding.UTF8; msg.BodyEncoding = Encoding.UTF8; // пріоритет msg.Priority = MailPriority.High; // Тіло листа в html? msg.IsBodyHtml = false; client.Credentials = новий NetworkCredential("login", "password"); client.Send(msg);
От і все. Не забудьте усі необхідні дані вказати правильно.
Коментарі ()
ruslang02 30
CoolHacker, чи можна у тебе взяти цей код для 3 частини веб-броузера?
Coolhacker 770 ruslang02 30Дякую, я його використовуватиму для відправки посилань по e-mail
як у FireFox
Однією з найбільш популярних функцій на сайті є форма заявки або замовлення, дані з якої надсилаються на пошту власнику сайту. Як правило, такі форми є простими і складаються з двох трьох полів для введення даних. Як створити таку форму замовлення? Тут потрібне використання мови розмітки HTML та мови програмування PHP.
Мова розмітки HTML сама по собі нескладна, потрібно лише розібратися в тому як і де ставити ті чи інші теги. З мовою програмування PHP все трохи складніше.
Для програміста створити таку форму не важко, а от HTML верстальнику може здатися складним деякі дії.
Створюємо форму відправлення даних у html
Перший рядок буде наступним
Тепер зберемо всі разом.
Тепер зробимо так, щоб поля у формі стали обов'язковими для заповнення. Маємо наступний код:
Створюємо файл, який приймає дані з HTML форми
Це буде файл із ім'ям send.php
У файлі першому етапі потрібно прийняти дані з посаду масиву. Для цього створюємо дві змінні:
$fio = $_POST["fio"];
$email = $_POST["email"];
Перед назвами змінних у php ставиться знак $, наприкінці кожного рядка ставиться крапка з комою. $_POST це масив у який передаються даний з форми. У формі html при цьому вказано метод відправлення method = "post". Так, прийнято дві змінні форми html. Для захисту свого сайту потрібно провести ці змінні через кілька фільтрів - функцій php.
Перша функція перетворює всі символи, які користувач спробує додати до форми:
При цьому нові змінні в PHP не створюються, а використовуються вже наявні. Що зробить фільтр, він перетворить символ "<" в "<". Также он поступить с другими символами, встречающимися в html коде.
Друга функція декодує URL, якщо користувач спробує його додати у форму.
$fio = urldecode($fio);
$email = urldecode($email);
Третьою функцією ми видалимо прогалини з початку і кінця рядка, якщо такі є:
$ fio = trim ($ fio);
$ email = trim ($ email);
Існують інші функції, що дозволяють відфільтрувати змінні php. Їх використання залежить від того, наскільки ви побоюєтеся того, що зловмисник спробує додати програмний код у цю форму надсилання даних на пошту html.
Перевірка даних, що передаються від HTML форми у файл PHP
Для того, щоб перевірити, чи цей код працює, чи передаються дані можна просто їх вивести на екран за допомогою функції echo:
echo $fio;
echo "
";
echo $email;
Другий рядок тут потрібний для того, щоб розділити виведення змінних php на різні рядки.
Надсилаємо отримані дані з форми HTML на пошту за допомогою PHP
Для надсилання даних на пошту потрібно скористатися функцією mail у PHP.
mail("на яку адресу відправити", "тема листа", "Повідомлення (тіло листа)","From: з якого email відправляється лист \r\n");
Наприклад, потрібно надіслати дані на email власника сайту чи менеджера [email protected].
Тема листа має бути зрозумілою, а повідомлення листа має містити те, що вказав користувач у формі HTML.
mail(" [email protected]", "Заявка із сайту", "ПІБ:".$fio.". E-mail: ".$email ,"From: [email protected]\r\n");
Необхідно додати умову, яка перевірить чи відправилася форма за допомогою PHP на вказану адресу електронної пошти.
if (mail(" [email protected]", "Замовлення із сайту", "ПІБ:".$fio.". E-mail: ".$email ,"From: [email protected]\r\n"))
{
echo "повідомлення успішно надіслано";
) else (
}
Таким чином, програмний код файлу send.php, який відправить дані HTML форми на пошту, буде виглядати наступним чином:
$fio = $_POST["fio"];
$email = $_POST["email"];
$fio = htmlspecialchars($fio);
$email = htmlspecialchars($email);
$fio = urldecode($fio);
$email = urldecode($email);
$ fio = trim ($ fio);
$ email = trim ($ email);
// echo $ fio;
// echo "
";
// echo $ email;
if (mail(" [email protected]", "Заявка із сайту", "ПІБ:".$fio.". E-mail: ".$email ,"From: [email protected]\r\n"))
( echo "повідомлення успішно надіслано");
) else (
echo "при надсиланні повідомлення виникли помилки";
}?>
Три рядки для перевірки, чи передаються дані у файл закоментовані. При необхідності їх можна видалити, оскільки вони були потрібні тільки для налагодження.
Поміщаємо HTML та PHP код відправлення форми в один файл
У коментарях до цієї статті багато хто запитує про те, як зробити, щоб і HTML форма і PHP код відправки даних на пошту знаходилися в одному файлі, а не двох.
Для реалізації такої роботи потрібно помістити HTML код форми у файл send.php та додати умову, яка перевірятиме наявність змінних у масиві POST (цей масив передається з форми). Тобто, якщо змінні в масиві не існують, потрібно показати користувачеві форму. Інакше потрібно прийняти дані з масиву та надіслати їх адресату.
Давайте подивимося, як змінити PHP код у файлі send.php:
//перевіряємо, чи існують змінні в масиві POST
if(!isset($_POST["fio"]) and !isset($_POST["email"]))(
?> ) else (
//показуємо форму
$fio = $_POST["fio"];
$email = $_POST["email"];
$fio = htmlspecialchars($fio);
$email = htmlspecialchars($email);
$fio = urldecode($fio);
$email = urldecode($email);
$ fio = trim ($ fio);
$ email = trim ($ email);
if (mail(" [email protected]", "Заявка із сайту", "ПІБ:".$fio.". E-mail: ".$email ,"From: [email protected]\r\n"))(
echo "Повідомлення успішно надіслано";
) else (
echo "При надсиланні повідомлення виникли помилки";
}
}
?>
Існування змінної в масиві POST ми перевіряємо PHP функцією isset(). Знак оклику перед цією функцією в умові означає заперечення. Тобто, якщо змінної не існує, потрібно показати нашу форму. Якби я не поставив знак оклику, то умова дослівно означало б - "якщо існує, то показати форму". А це неправильно у нашому випадку. Звичайно, ви можете перейменувати його в index.php. Якщо будуть перейменовувати файл, то не забудьте перейменувати назву файлу і в рядку