Изпращане на имейл. Програмно изпращане на имейл чрез различни услуги Изпращане на имейл с прикачен файл c#

Последна актуализация: 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 клиентът. Както разбирате, сървърът може да бъде или този, на който работи приложението, или отдалечен, на който имате права да изпращате писма без допълнително разрешение.

Примерен код за изпращане на имейл от локална машина:
", "[имейл защитен]"))( mm.Subject = "Тема на пощата"; mm.Body = "Тяло на пощата"; mm.IsBodyHtml = false; използвайки (SmtpClient sc = нов SmtpClient("127.0. пощенски сървър и порт, ако е необходимо sc.Send(mm) );)))

Използване на пощенски услуги като Gmail, Yandex, Mail.ru и др. всичко е същото, добавят се само параметри с оторизация.

SMTP сървър: smtp.gmail.com
Порт: 587
използвайки (MailMessage mm = ново MailMessage("Име ", "[имейл защитен]"))( mm.Subject = "Тема на имейла"; mm.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(" [имейл защитен]", "GmailPassword"); sc.Send(mm); ) )

SMTP сървър: smtp.yandex.ru
Порт: 25
използвайки (MailMessage mm = ново MailMessage("Име ", "[имейл защитен]"))( mm.Subject = "Тема на пощата"; mm.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(" [имейл защитен]", "YandexPassword"); sc.Send(mm); ) )

SMTP сървър: smtp.mail.ru
Порт: 25
използвайки (MailMessage mm = ново MailMessage("Име ", "[имейл защитен]"))( mm.Subject = "Тема на пощата"; mm.Body = "Тяло на пощата"; mm.IsBodyHtml = false; използвайки (SmtpClient sc = нов SmtpClient("smtp.mail.ru", 25))( sc. EnableSsl = true; sc.DeliveryMethod = SmtpDeliveryMethod.Network; sc.UseDefaultCredentials = false; sc.Credentials = new NetworkCredential(" [имейл защитен]", "MailRuPassword"); sc.Send(mm); ) )
Ако имате Пощенска кутияв услугата 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 форма за изпращане

Първият ред ще бъде следващият

Това е много важен елемент на формата. В него посочваме как ще се прехвърлят данните и към кой файл. В този случай всичко се изпраща чрез метода POST към файла send.php. Програмата в този файл съответно трябва да приеме данните, те ще се съдържат в пощенския масив и да ги изпрати на посочения имейл адрес.

Да се ​​върнем на формата. Вторият ред ще съдържа поле за въвеждане на пълно име. Има следния код:

Типът формуляр е текстов, т.е. потребителят ще може да въвежда или копира текст тук от клавиатурата. Параметърът name съдържа името на формуляра. В този случай това е fio, под това име ще се предава всичко, което потребителят въвежда в това поле. Параметърът placeholder указва какво ще бъде написано в това поле като обяснение.

Следващ ред:

Тук почти всичко е същото, но името на полето е посочено като имейл и е посочено обяснението за потребителя да въведе своя имейл адрес в тази форма.

Следващият ред ще бъде бутонът за изпращане:

И последният ред във формуляра ще бъде етикетът

Сега нека съберем всичко заедно.





Сега нека направим полетата във формата задължителни. Имаме следния код:





Създайте файл, който приема данни от 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. Ако преименувате файла, не забравяйте да преименувате името на файла и в реда

. Формулярът трябва да има връзка към същата страница, като например index.php. Добавих заглавието на страницата към кода.

Често срещани грешки, които възникват при изпращане на PHP формуляр от уебсайт

Първата, вероятно най-популярната грешка, е когато видите празна бяла страница без съобщения. Това означава, че сте направили грешка в кода на страницата. Трябва да включите показването на всички грешки в PHP и тогава ще видите къде е допусната грешката. Добавяне към кода:

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

Файлът send.php трябва да се изпълнява само на сървъра, в противен случай кодът просто няма да работи. Желателно е това да не е локален сървър, тъй като не винаги е конфигуриран да изпраща данни към външен пощенски сървър. Ако стартирате кода на сървър, различен от сървъра, тогава ще видите PHP кода точно на страницата.

Затова за правилна работа препоръчвам да поставите файла send.php на хостинга на сайта. Там, като правило, всичко вече е конфигурирано.

Друга често срещана грешка е, когато се появи известието „Съобщението е изпратено успешно“, но писмото не пристига по пощата. В този случай трябва внимателно да проверите линията:

ако (поща(" [имейл защитен]", "Поръчай от сайта", "Име:".$fio.". Имейл: ".$email ,"От: [имейл защитен]\r\n"))

Вместо [имейл защитен] трябва да бъде имейл адрес, на който искате да изпратите писмо, но вместо[имейл защитен] трябва да е съществуващ имейл за този сайт. Например за сайт на сайт това би било . Само в този случай писмото с данните от формата ще бъде изпратено.

Командир на кораба 14 октомври 2013 г. в 19:29 ч

Програмно изпращане на имейл чрез различни услуги

Много често трябва да се занимавате с изпращане на имейли от програмен код. Не е нужно да търсите далеч за примери.

Тази статия е намек и не разкрива нищо ново, но преди да я напиша, погледнах подобно в интернет и бях доста изненадан, че почти навсякъде предлагат или неработещо или остаряло решение, или просто написано неграмотно.

Първото нещо, което не трябва да правите с тези примери, е да използвате System.Web.Mail, който отдавна е остарял и започвайки с Visual Studio 2010, не можете дори да добавите библиотеката System.Web, без да знаете пълния път до съответния DLL.
Вместо това се предлага да се използва библиотеката System.Net.
използване на System.Net; използване на System.Net.Mail;
И така, най-простият, той е и най-важен и често използван, е изпращането на писмо от вашия пощенски сървър, на който е конфигуриран SMTP клиент. Както разбирате, сървърът може да бъде или този, на който работи приложението, или отдалечен, на който имате права да изпращате писма без допълнително разрешение.

Примерен код за изпращане на имейл от локална машина:
", "[имейл защитен]"))( mm.Subject = "Тема на пощата"; mm.Body = "Тяло на пощата"; mm.IsBodyHtml = false; използвайки (SmtpClient sc = нов SmtpClient("127.0. пощенски сървър и порт, ако е необходимо sc.Send(mm) );)))

Използване на пощенски услуги като Gmail, Yandex, Mail.ru и др. всичко е същото, добавят се само параметри с оторизация.

SMTP сървър: smtp.gmail.com
Порт: 587
използвайки (MailMessage mm = ново MailMessage("Име ", "[имейл защитен]"))( mm.Subject = "Тема на имейла"; mm.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(" [имейл защитен]", "GmailPassword"); sc.Send(mm); ) )

SMTP сървър: smtp.yandex.ru
Порт: 25
използвайки (MailMessage mm = ново MailMessage("Име ", "[имейл защитен]"))( mm.Subject = "Тема на пощата"; mm.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(" [имейл защитен]", "YandexPassword"); sc.Send(mm); ) )

SMTP сървър: smtp.mail.ru
Порт: 25
използвайки (MailMessage mm = ново MailMessage("Име ", "[имейл защитен]"))( mm.Subject = "Тема на пощата"; mm.Body = "Тяло на пощата"; mm.IsBodyHtml = false; използвайки (SmtpClient sc = нов SmtpClient("smtp.mail.ru", 25))( sc. EnableSsl = true; sc.DeliveryMethod = SmtpDeliveryMethod.Network; sc.UseDefaultCredentials = false; sc.Credentials = new NetworkCredential(" [имейл защитен]", "MailRuPassword"); sc.Send(mm); ) )
Ако вашата пощенска кутия в услугата mail.ru завършва с inbox.ru, list.ru или bk.ru, адресът на SMTP сървъра се променя съответно (smtp.inbox.ru, smtp.list.ru и smtp.bk.ru).

Както можете да видите, за да използвате друга пощенска услуга във вашите програми, трябва само да разберете адреса и порта на SMTP сървъра, както и правилата за оторизация.

Трябва също да се помни, че почти всички имейл услуги на трети страни налагат ограничения върху броя имейли, изпратени за определен период от време.

Етикети: имейл, изпращане на имейли, smtp

Здравейте. Тъй като графоманията ми напредва, реших да добавя още една статия. Статията ще, както винаги, с примери в C #, но повече или по-малко умел VB "schnik лесно ще пренапише целия код под VB.NET.

Може би да започнем

За да изпратим имейл, трябва да използваме три обекта. System.Net.Mail.SmtpClient за изпращане на съобщение, System.Net.Mail.MailMessage за представяне на съобщение и System.Net.NetworkCredential за упълномощаване.

Нека създадем клиент:

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

препратка към конструктора:

SmtpClient(низ хост, int порт);

Нека създадем екземпляр на класа MailMessage:

Var msg = ново MailMessage("от", "до");

Сега нека зададем темата и съдържанието на писмото (между другото, всичко може да се зададе в конструктора). Както и данните за вход и парола за smtp клиента. След това ще изпратим имейл, използвайки метода Send на нашия клиентски обект:

Var client = нов SmtpClient("smtp.yandex.ru"); var msg = new MailMessage("от", "до"); msg.Subject = "Моето тестово съобщение"; msg.Body = "Здравей, приятелю! Само си представете, че току-що написах невероятна програма, за да ви изпратя това безсмислено писмо милиард пъти само с няколко кликвания!"; msg.SubjectEncoding = Encoding.UTF8; msg.BodyEncoding = Encoding.UTF8; // приоритет msg.Priority = MailPriority.High; // тяло на съобщението в html? msg.IsBodyHtml = невярно; client.Credentials = new NetworkCredential("вход", "парола"); client.Send(msg);

Това е всичко. Уверете се, че сте въвели цялата необходима информация правилно.


коментари()

ruslang02 30

CoolHacker, мога ли да заема този код от вас за част 3 на уеб браузъра?

Coolhacker 770 ruslang02 30

Благодаря ви, ще го използвам за изпращане на линкове по имейл
като във Firefox

LetSevI 10

Зареждане...
Връх