Последна актуализация: 31.10.2015
SMTP (Simple Mail Transfer Protocol) се използва за изпращане на поща през Интернет. Този протоколуказва как пощенските сървъри взаимодействат при пренос електронна поща.
За работа с SMTP протокола и изпращане на електронна поща в .NET е предназначен класът SmtpClient от пространството на имената System.Net.Mail.
Този клас дефинира редица свойства, които ви позволяват да персонализирате изпращането:
Хост: smtp сървър, от който се изпраща пощата. Например smtp.yandex.ru
Порт: Портът, използван от smp сървъра. Ако не е посочен, порт 25 се използва по подразбиране.
Идентификационни данни: данни за удостоверяване на подателя
EnableSsl: указва дали да се използва SSL протоколпри изпращане
Друг ключов клас, който се използва при изпращане, е MailMessage. Този клас представлява съобщението, което се изпраща. Сред неговите свойства са следните:
Прикачени файлове: съдържа всички прикачени файлове към имейл
Тяло: директно текста на писмото
От: адрес на изпращача. Представлява обект MailAddress
До: адрес на получател. Също така представлява обект MailAddress
Тема: определя темата на имейла
IsBodyHtml: Показва дали имейлът представлява съдържание с html код
Нека използваме тези класове и изпратим имейла:
Използване на системата; използване на System.Net; използване на System.IO; използване на System.Threading.Tasks; използване на System.Net.Mail; namespace NetConsoleApp ( class Program ( static void Main(string args) ( // подател - задайте адреса и името, показвани в писмото MailAddress from = new MailAddress(" [имейл защитен]", "Том"); // на кого изпращаме MailAddress = нов MailAddress(" [имейл защитен]"); // създаване на обект на съобщение MailMessage m = new MailMessage(from, to); // тема на имейла m.Subject = "Тест"; // текст на имейла m.Body = "
Letter-тест на smtp-клиента
"; // буквата представлява html код m.IsBodyHtml = вярно; // адрес на smtp сървъра и порт, от който ще изпратим писмо SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587); // потребителско име и парола smtp.Credentials = new NetworkCredential(" [имейл защитен]", "mypassword"); smtp.EnableSsl = true; smtp.Send(m); Console.Read(); ) ) )За изпращане се използва методът Send(), в който се предава обектът MailMessage.
Можем също да използваме асинхронната версия на изпращане с метода SendMailAsync:
Използване на системата; използване на System.Net; използване на System.IO; използване на System.Threading.Tasks; използване на 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(" [имейл защитен]", "Том"); MailAddress to = нов MailAddress(" [имейл защитен]"); MailMessage m = new MailMessage(from, to); m.Subject = "Test"; m.Body = "Smtp client work test letter 2"; SmtpClient smtp = new SmtpClient("smtp.gmail.com" , 587 ); smtp.Credentials = new NetworkCredential(" [имейл защитен]", "mypassword"); smtp.EnableSsl = true; изчакайте smtp.SendMailAsync(m); Console.WriteLine("Изпратена поща"); ) ) )
Добави прикачени файлове
Можем да прикачваме прикачени файлове към имейли, като използваме свойството Attachments. Всеки прикачен файл представлява обект System.Net.Mail.Attachment:
MailAddress от = нов MailAddress(" [имейл защитен]", "Том"); MailAddress to = нов MailAddress(" [имейл защитен]"); MailMessage m = ново MailMessage(от, до); m.Attachments.Add(new Attachment("D://temlog.txt"));
Командир на кораба 14 октомври 2013 г. в 19:29 чПрограмно изпращане на имейл чрез различни услуги
- .net,
Много често трябва да се занимавате с изпращане имейлиот програмен код. Не е нужно да търсите далеч за примери.
Тази статия е намек и не разкрива нищо ново, но преди да я напиша, погледнах подобно в интернет и бях доста изненадан, че почти навсякъде предлагат или неработещо или остаряло решение, или просто написано неграмотно.
Първото нещо, което не трябва да правите с тези примери, е да използвате System.Web.Mail, който е отхвърлен от дълго време и от визуално студио 2010 библиотеката System.Web дори не може да бъде добавена, без да знаете пълен пъткъм съответния DLL.
Вместо това се предлага да се използва библиотеката System.Net.
използване на System.Net; използване на System.Net.Mail;
И така, най-простият, той е и най-важен и често използван е изпращането на писмо от вашия пощенски сървърТози, на който е конфигуриран SMTP клиентът. Както разбирате, сървърът може да бъде или този, на който работи приложението, или отдалечен, на който имате права да изпращате писма без допълнително разрешение.
Примерен код за изпращане на имейл от локална машина:
Използване на пощенски услуги като Gmail, Yandex, Mail.ru и др. всичко е същото, добавят се само параметри с оторизация.
SMTP сървър: smtp.gmail.com
Порт: 587
използвайки (MailMessage mm = ново MailMessage("Име
SMTP сървър: smtp.yandex.ru
Порт: 25
използвайки (MailMessage mm = ново MailMessage("Име
SMTP сървър: smtp.mail.ru
Порт: 25
използвайки (MailMessage mm = ново MailMessage("Име
Ако имате Пощенска кутияв услугата mail.ru завършва с inbox.ru, list.ru или bk.ru, след което адресът на SMTP сървъра (smtp.inbox.ru, smtp.list.ru и smtp.bk.ru) се променя съответно.
Както можете да видите, за да използвате друга пощенска услуга във вашите програми, трябва само да разберете адреса и порта на SMTP сървъра, както и правилата за оторизация.
Трябва също да се помни, че почти всички имейл услуги на трети страни налагат ограничения върху броя имейли, изпратени за определен период от време.
Етикети: имейл, изпращане на имейли, smtp
Една от най-търсените функции на сайта е формата за кандидатстване или поръчка, данните от която се изпращат на пощата на собственика на сайта. По правило такива форми са прости и се състоят от две или три полета за въвеждане на данни. Как да създадете такава форма за поръчка? Това ще изисква използването на езика за маркиране на HTML и езика PHP програмиране.
Самият език за маркиране на HTML е прост, просто трябва да разберете как и къде да поставите определени тагове. С езика за програмиране PHP нещата са малко по-сложни.
Не е трудно за програмист да създаде такава форма, но някои действия може да изглеждат трудни за HTML кодер.
Създаване на html форма за изпращане
Първият ред ще бъде следващият
Сега нека съберем всичко заедно.
Сега нека направим полетата във формата задължителни. Имаме следния код:
Създайте файл, който приема данни от HTML формуляр
Това ще бъде файл, наречен send.php
Във файла на първия етап трябва да получите данни от пощенския масив. За да направим това, създаваме две променливи:
$fio = $_POST["fio"];
$имейл = $_POST["имейл"];
Имената на променливите в php се предхождат от знак $, а в края на всеки ред се поставя точка и запетая. $_POST е масив, към който се предават данните от формата. В html формата е посочен методът за изпращане method="post". По този начин се вземат две променливи от html форми. За целите на защитата на вашия сайт е необходимо да прекарате тези променливи през няколко филтъра - php функции.
Първата функция ще преобразува всички символи, които потребителят ще се опита да добави към формата:
В този случай не се създават нови променливи в php, а се използват съществуващи. Това, което филтърът ще направи, е да преобразува знака "<" в "<". Также он поступить с другими символами, встречающимися в html коде.
Втората функция декодира URL адреса, ако потребителят се опита да го добави към формуляра.
$fio = urldecode($fio);
$имейл = urldecode($имейл);
С третата функция ще премахнем интервалите от началото и края на низа, ако има такива:
$fio = подстригване($fio);
$имейл = трим($имейл);
Има и други функции, които ви позволяват да филтрирате php променливи. Използването им зависи от това колко се страхувате, че нападател ще се опита да добави програмен код към тази форма на изпращане на данни към html поща.
Валидирайте данните, предадени от HTML формуляр към PHP файл
За да проверите дали този код работи, ако данните се прехвърлят, можете просто да ги покажете на екрана с помощта на функцията ехо:
ехо $fio;
ехо "
";
ехо $ имейл;
Вторият ред тук е необходим, за да се разделят изходните данни на php променливите на различни редове.
Изпращане на получените данни от HTML формата до пощата чрез PHP
За да изпратите данни до пощата, трябва да използвате функцията за поща в PHP.
mail("до кой адрес да се изпрати", "тема на писмото", "Съобщение (тяло на писмото)","От: от кой имейл е изпратено писмото \r\n");
Например, трябва да изпратите данни на имейла на собственика или мениджъра на сайта [имейл защитен]
Темата на имейла трябва да е ясна и съобщението на имейла трябва да съдържа това, което потребителят е посочил в HTML формата.
поща(" [имейл защитен]", "Заявление от сайта", "Име:".$fio.". Имейл: ".$email ,"От: [имейл защитен]\r\n");
Трябва да добавите условие, което ще проверява дали формулярът е изпратен чрез PHP до посочения имейл адрес.
ако (поща(" [имейл защитен]", "Поръчай от сайта", "Име:".$fio.". Имейл: ".$email ,"От: [имейл защитен]\r\n"))
{
echo "съобщението е изпратено успешно";
) иначе (
}
По този начин програмният код на файла send.php, който ще изпрати данните от HTML формата на пощата, ще изглежда така:
$fio = $_POST["fio"];
$имейл = $_POST["имейл"];
$fio = htmlspecialchars($fio);
$имейл = htmlspecialchars($имейл);
$fio = urldecode($fio);
$имейл = urldecode($имейл);
$fio = подстригване($fio);
$имейл = трим($имейл);
//ехо $fio;
// ехо "
";
//ехо $имейл;
ако (поща(" [имейл защитен]", "Заявление от сайта", "Име:".$fio.". Имейл: ".$email ,"От: [имейл защитен]\r\n"))
( echo "съобщението е изпратено успешно";
) иначе (
echo "възникнаха грешки при изпращане на съобщението";
}?>
Трите реда за проверка дали данните се предават към файла са коментирани. Ако е необходимо, те могат да бъдат премахнати, тъй като са били необходими само за отстраняване на грешки.
Поставете HTML и PHP код за подаване на формуляр в един файл
В коментарите към тази статия много хора питат как да направят както HTML формуляра, така и PHP кода за изпращане на данни до пощата в един файл, а не в два.
За да реализирате тази работа, трябва да поставите HTML кода на формуляра във файла send.php и да добавите условие, което ще проверява за наличието на променливи в POST масива (този масив се предава от формуляра). Тоест, ако променливите в масива не съществуват, тогава трябва да покажете на потребителя формуляр. В противен случай трябва да вземете данните от масива и да ги изпратите на адресата.
Нека да видим как да променим PHP кода във файла send.php:
//проверете дали съществуват променливи в POST масива
if(!isset($_POST["fio"]) и !isset($_POST["email"]))(
?> ) иначе (
// показване на формата
$fio = $_POST["fio"];
$имейл = $_POST["имейл"];
$fio = htmlspecialchars($fio);
$имейл = htmlspecialchars($имейл);
$fio = urldecode($fio);
$имейл = urldecode($имейл);
$fio = подстригване($fio);
$имейл = трим($имейл);
ако (поща(" [имейл защитен]", "Заявление от сайта", "Име:".$fio.". Имейл: ".$email ,"От: [имейл защитен]\r\n"))(
echo "Съобщението е изпратено успешно";
) иначе (
echo "Възникнаха грешки при изпращане на съобщението";
}
}
?>
Проверяваме съществуването на променлива в POST масива с PHP функцията isset(). Удивителен знак преди тази функция в условие означава отрицание. Тоест, ако променливата не съществува, тогава трябва да покажем нашата форма. Ако не сложих удивителен знак, тогава условието щеше да означава буквално - "ако съществува, тогава покажете формата". И това е грешно в нашия случай. Естествено, можете да го преименувате на index.php. Ако преименувате файла, не забравяйте да преименувате името на файла и в реда