Найпростіша форма надсилання даних на пошту за допомогою HTML та PHP. Програмне відправлення email, використовуючи різні сервіси Надсилання листів на пошту visual studio

💖 Подобається?Поділися з друзями посиланням

Останнє оновлення: 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 using namespace System; using namespace System::Net; using namespace System::Net::Mail; using namespace System::Net::Mime; using namespace System::Threading; using namespace System::ComponentModel; int main() ( SmtpClient ^Smtp = gcnew SmtpClient("smtp.mail.ru", 25); Smtp->Credentials = gcnew NetworkCredential("ваша_пошта@mail.ru", "ваш_пароль"); Smtp->Enable MailMessage ^Message = gcnew MailMessage(); Message->From = gcnew MailAddress("ваша_пошта@mail.ru"); >Subject = "Заголовок"; Message->Body = "Повідомлення"; Smtp->Send(Message); консольним, підтримувати CLR-середовище. Розглянемо докладніше, що відбувається і в якому рядку в даній програмі C++, яка надсилає повідомлення на вибрану скриньку електронної пошти.

З 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-клієнт. Як ви розумієте, сервер може бути як і той, на якому працює додаток, так і віддалений, на якому ви маєте право надсилати листи без додаткової авторизації.

Приклад коду для надсилання листа з локальної машини:
", "[email protected]"))( mm.Subject = "Mail Subject"; mm.Body = "Mail Body"; mm.IsBodyHtml = false; using (SmtpClient sc = new SmtpClient("127.0.0.1"))) поштового сервера та порт, якщо потрібно sc.Send(mm); ) )

За допомогою поштових служб, таких як Gmail, Yandex, Mail.ru і т.д. все те саме, тільки додаються параметри з авторизацією.

SMTP-сервер: smtp.gmail.com
Порт: 587
using (MailMessage mm = новий MailMessage("Name ", "[email protected]"))(mm.Subject = "Mail Subject"; mm.Body = "Mail Body"; mm.IsBodyHtml = false; EnableSsl = true, sc.DeliveryMethod = SmtpDeliveryMethod.Network; sc.UseDefaultCredentials = false; [email protected]", "GmailPassword"); sc.Send(mm); ) )

SMTP-сервер: smtp.yandex.ru
Порт: 25
using (MailMessage mm = новий MailMessage("Name ", "[email protected]"))( mm.Subject = "Mail Subject"; mm.Body = "Mail Body"; EnableSsl = true, sc.DeliveryMethod = SmtpDeliveryMethod.Network; sc.UseDefaultCredentials = false; [email protected]", "YandexPassword"); sc.Send(mm); ) )

SMTP-сервер: smtp.mail.ru
Порт: 25
using (MailMessage mm = новий MailMessage("Name ", "[email protected]"))( mm.Subject = "Mail Subject"; mm.Body = "Mail Body"; EnableSsl = true, sc.DeliveryMethod = SmtpDeliveryMethod.Network; sc.UseDefaultCredentials = false; [email protected]", "MailRuPassword"); sc.Send(mm); ) )
Якщо у вас Поштова скринькана сервісі 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

LetSevI 10

Однією з найбільш популярних функцій на сайті є форма заявки або замовлення, дані з якої надсилаються на пошту власнику сайту. Як правило, такі форми є простими і складаються з двох трьох полів для введення даних. Як створити таку форму замовлення? Тут потрібне використання мови розмітки HTML та мови програмування PHP.

Мова розмітки HTML сама по собі нескладна, потрібно лише розібратися в тому як і де ставити ті чи інші теги. З мовою програмування PHP все трохи складніше.

Для програміста створити таку форму не важко, а от HTML верстальнику може здатися складним деякі дії.

Створюємо форму відправлення даних у html

Перший рядок буде наступним

Це важливий елемент форми. У ньому ми вказуємо, яким чином будуть передаватися дані та якому файлу. В даному випадку все передається методом POST файлу send.php. Програма в цьому файлі відповідно повинна прийняти дані, вони будуть міститися в post-масиві, і відправити їх на вказану email адресу.

Повернемося до форми. Другий рядок міститиме поле для введення ПІБ. Має наступний код:

Тип форми text, тобто, користувач зможе ввести або скопіювати сюди текст з клавіатури. Під параметром name міститься назва форми. В даному випадку це fio, саме під таким ім'ям буде передаватися все, що користувач введений у поле. Параметр placeholder вказує на те, що буде записано в цьому полі як пояснення.

Наступний рядок:

Тут практично все те ж саме, але ім'я для поля вказане email, а в поясненні вказано, щоб користувач у цю форму ввів свою адресу електронної пошти.

Наступним рядком буде кнопка "надіслати":

І останнім рядком у формі буде тег

Тепер зберемо всі разом.





Тепер зробимо так, щоб поля у формі стали обов'язковими для заповнення. Маємо наступний код:





Створюємо файл, який приймає дані з 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. Якщо будуть перейменовувати файл, то не забудьте перейменувати назву файлу і в рядку

. Форма повинна посилатися на цю сторінку, наприклад index.php. У код я додав заголовок сторінки.

Часті помилки, що виникають під час відправки PHP форми з сайту

Перша, напевно, найпопулярніша помилка, це коли ви бачите порожню білу сторінку без повідомлень. Це означає, що ви припустилися помилки в коді сторінки. Вам потрібно включити відображення всіх помилок у PHP і тоді ви побачите, де допущена помилка. Додати до коду:

ini_set("display_errors","On");
error_reporting("E_ALL");

Файл send.php повинен запускатися лише на сервері, інакше код просто не працюватиме. Бажано, щоб це був не локальний сервер, оскільки він не завжди налаштований на надсилання даних на зовнішній поштовий сервер. Якщо ви запустите код не на сервері, вам відобразиться код PHP прямо на сторінці.

Таким чином, для коректної роботи я рекомендую розмістити файл send.php на хостинг сайту. Там зазвичай все вже налаштовано.

Ще одна часта помилка, коли з'являється повідомлення "Повідомлення успішно відправлено", а лист не надходить на пошту. У цьому випадку слід уважно перевірити рядок:

if (mail(" [email protected]", "Замовлення із сайту", "ПІБ:".$fio.". E-mail: ".$email ,"From: [email protected]\r\n"))

Замість [email protected] повинен бути email адресу на яку потрібно надіслати листа, а замість[email protected] має бути існуючий email даного сайту. Наприклад, для сайту сайт це буде . Тільки в цьому випадку лист із даними з форми буде надіслано.

Розповісти друзям