Работа с электронной почтой. Программная отправка email, используя различные сервисы Отправляем полученные данные из формы HTML на почту при помощи PHP


Отправка сообщений на почту в 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->EnableSsl = true; MailMessage ^Message = gcnew MailMessage(); Message->From = gcnew MailAddress("ваша_почта@mail.ru"); Message->To->Add(gcnew MailAddress("почта_получателя@yandex.ru")); Message->Subject = "Заголовок"; Message->Body = "Сообщение"; Smtp->Send(Message); } Стоит сразу оговориться, какие условия должны быть соблюдены: проект в Visual Studio 2013 создается не только для C++, он еще должен быть консольным, поддерживать 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) и в третьей - добавляем его к письму. Вот и все.

Одной из самых востребованных функций на сайте является форма заявки или заказа, данные из которой отправляются на почту владельцу сайта. Как правило такие формы являются простыми и состоят из двух трех полей для ввода данных. Как же создать такую форму заказа? Здесь потребуется использование языка разметки 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 данного сайта. Например для сайта сайт это будет . Только в этом случае письмо с данными из формы будет отправлено.

Командир судна 14 октября 2013 в 19:29

Программная отправка email, используя различные сервисы

Очень часто приходится сталкиваться с отправкой электронных писем из программного кода. За примерами далеко ходить не нужно.

Данная статья является подсказкой и не открывает ничего нового, но прежде чем её писать, посмотрел похожее в интернете и был довольно удивлён тому, что почти везде предлагают или не работающее или устаревшее решение, либо просто написано неграмотно.

Первое, что не стоит делать по этим примерам – это использовать 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 = new MailMessage("Name ", "[email protected]")){ mm.Subject = "Mail Subject"; mm.Body = "Mail Body"; mm.IsBodyHtml = false; using (SmtpClient sc = new SmtpClient("smtp.gmail.com", 587)){ sc.EnableSsl = true; sc.DeliveryMethod = SmtpDeliveryMethod.Network; sc.UseDefaultCredentials = false; sc.Credentials = new NetworkCredential("[email protected]", "GmailPassword"); sc.Send(mm); } }

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

SMTP-сервер: smtp.mail.ru
Порт: 25
using (MailMessage mm = new MailMessage("Name ", "[email protected]")){ mm.Subject = "Mail Subject"; mm.Body = "Mail Body"; mm.IsBodyHtml = false; using (SmtpClient sc = new SmtpClient("smtp.mail.ru", 25)){ sc.EnableSsl = true; sc.DeliveryMethod = SmtpDeliveryMethod.Network; sc.UseDefaultCredentials = false; sc.Credentials = new NetworkCredential("[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

Командир судна 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 = new MailMessage("Name ", "[email protected]")){ mm.Subject = "Mail Subject"; mm.Body = "Mail Body"; mm.IsBodyHtml = false; using (SmtpClient sc = new SmtpClient("smtp.gmail.com", 587)){ sc.EnableSsl = true; sc.DeliveryMethod = SmtpDeliveryMethod.Network; sc.UseDefaultCredentials = false; sc.Credentials = new NetworkCredential("[email protected]", "GmailPassword"); sc.Send(mm); } }

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

SMTP-сервер: smtp.mail.ru
Порт: 25
using (MailMessage mm = new MailMessage("Name ", "[email protected]")){ mm.Subject = "Mail Subject"; mm.Body = "Mail Body"; mm.IsBodyHtml = false; using (SmtpClient sc = new SmtpClient("smtp.mail.ru", 25)){ sc.EnableSsl = true; sc.DeliveryMethod = SmtpDeliveryMethod.Network; sc.UseDefaultCredentials = false; sc.Credentials = new NetworkCredential("[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.

Начнем, пожалуй

Для отправки E-Mail нам нужно воспользоваться тремя объектами. System.Net.Mail.SmtpClient для отправки сообщения, System.Net.Mail.MailMessage для представления сообщения, и System.Net.NetworkCredential для авторизации.

Создадим клиент:

Var client = new SmtpClient("$Mail-Server-Address$", $Mail-Server-Port$);

Референция конструктора:

SmtpClient(string host, int port);

Создадим экземпляр класса MailMessage:

Var msg = new MailMessage("from", "to");

Теперь зададим тему и содержимое письма (к слову говоря, все можно задать и в конструкторе). А также логин и пароль smtp-клиенту. Затем отправим письмо методом Send нашего объекта client:

Var client = new SmtpClient("smtp.yandex.ru"); var msg = new MailMessage("from", "to"); msg.Subject = "My test message"; msg.Body = "Hello, my friend! Just imagine, that I just written a incredible program to send this meaningless letter to you a billion times only by several clicks!"; msg.SubjectEncoding = Encoding.UTF8; msg.BodyEncoding = Encoding.UTF8; // приоритет msg.Priority = MailPriority.High; // тело письма в html? msg.IsBodyHtml = false; client.Credentials = new NetworkCredential("login", "password"); client.Send(msg);

Вот и все. Не забудьте все необходимые данные указать правильно.


Комментарии ()

ruslang02 30

CoolHacker, можно у тебя взять этот код для 3 части веб-броузера?

Coolhacker 770 ruslang02 30

Спасибо, я его буду использовать для отправки ссылок по e-mail
как в FireFox

LetSevI 10






2024 © uzbek-seks.ru.