Изпращане на поща чрез smtp на трета страна. Изпращане на поща чрез SMTP в PHP

От дълго време търся решение за изпращане на писма до потребители не чрез функцията mail () в PHP, а чрез SMTP пощенски сървъри. В интернет няма толкова много разнообразна информация, но това, което има, не работи съвсем така или изобщо не работи. Затова събрах всичко и написах кода си на базата на готовите, които са представени в сайтовете.

Защо изпращане чрез SMTP, а не по поща ()

Отговорът ми е доста прост - за известно време вирусите изпращаха тонове писма през моя сървър, което доведе до БАНА на моя IP адрес от много имейли, по-специално от gmail.com, и в тази връзка потребителите можеха да получават писма, така че Трябваше да търся алтернатива и открих, че е SMTP

Може би ще се интересувате защо моят сценарий е по-добър от другите, които лежат наоколо ?! аз ще отговоря

  1. Работи с yandex, rambler, mail (gmail не можа да спечели)
  2. Изчистване на кода. За да го настроите, просто сменете няколко реда
  3. Изпраща имейли в HTML формат

Ето предимствата на моя скрипт, от които не намерих в интернет, но от всеки взех всичко необходимо. И така, нека да разгледаме кода.

Функция smtpmail ($ mail_to, $ тема, $ съобщение, $ service = "yandex") ($ config ["smtp_charset"] = "windows-1251"; // кодиране на съобщение. (Или UTF-8 и т.н.) $ config [ "smtp_from"] = "mashintop.ru"; // Вашето име - или името на вашия сайт. Ще се покаже при четене в полето "От" $ config ["smtp_debug"] = false; // Ако искате за да видите съобщения за грешка, посочете true вместо false $ config ["smtp_port"] = "25"; // Работен порт. Не променяйте, ако не сте сигурни. if ($ service == "yandex") ($ config [ "smtp_searcher"] = "yandex. ru "; $ config [" smtp_email "] =" [защитен с имейл]"; $ config [" smtp_username "] =" mashintop "; // Променете името на вашата пощенска кутия. $ config [" smtp_host "] =" smtp.yandex.ru "; // сървър за изпращане на поща $ config [" smtp_password "] =" moi_parol "; // Променете паролата си) elseif ($ service ==" rambler ") ($ config [" smtp_searcher "] =" rambler.ru "; $ config [" smtp_email "] =" [защитен с имейл]"; $ config [" smtp_username "] =" mashintop "; // Променете името на вашата пощенска кутия. $ config [" smtp_host "] =" smtp.rambler.ru "; // сървър за изпращане на поща $ config [" smtp_password "] =" moi_parol "; // Променете паролата си) elseif ($ service ==" mail ") ($ config [" smtp_searcher "] =" mail.ru "; $ config [" smtp_email "] =" [защитен с имейл]"; $ config [" smtp_username "] =" mashintop "; // Променете името на вашата пощенска кутия. $ config [" smtp_host "] =" smtp.mail.ru "; // сървър за изпращане на поща $ config [" smtp_password "] =" moi_parol "; // Променете паролата си) elseif ($ service ==" gmail ") ($ config [" smtp_searcher "] =" gmail.com "; $ config [" smtp_email "] =" [защитен с имейл]"; $ config [" smtp_username "] =" alexeybertram "; // Променете името на вашата пощенска кутия. $ config [" smtp_host "] =" smtp.gmail.com "; // сървър за изпращане на поща $ config [" smtp_password " ] =" moi_parol "; // Променете паролата си) $ header =" Дата: ".date (" D, j MYG: i: s ")." + 0700rn "; $ header. =" От: =? Windows-1251? Q? ". Str_replace (" + "," _ ", str_replace ("% "," = ", urlencode (" ". $ Config [" smtp_от "]." ")))."? =<".$config["smtp_email"].">rn "; $ header. =" X-Mailer: Прилепът! (v3.99.3) Professionalrn "; $ header. =" Reply-To: =? windows-1251? Q?". str_replace (" + "," _ ", str_replace ("% "," = ", urlencode (" ". $ config [" smtp_from "]." ")))."? =<".$config["smtp_email"].">rn "; $ header. =" X-Priority: 3 (Normal) rn "; $ header. =" Message-ID:<172562218.".date("YmjHis")."@".$config["smtp_searcher"].">rn "; $ header. =" To: =? windows-1251? Q?". str_replace (" + "," _ ", str_replace ("% "," = ", urlencode (" ")))."? =<$mail_to>rn "; $ header. =" Тема: =? windows-1251? Q? ". str_replace (" + "," _ ", str_replace ("% "," = ", urlencode (" ". $ subject." " )))." "? = rn"; $ header. = "MIME-версия: 1.0rn"; $ header. = "Тип на съдържанието: текст / html; charset = windows-1251rn "; $ header. =" Content-Transfer-Encoding: 8bitrn "; $ smtp_conn = fsockopen (" ". $ config [" smtp_host "]." ", $ config [" smtp_port "], $ errno , $ errstr, 10); if (! $ smtp_conn) (отпечатайте "връзката от сървъри неуспешна"; fclose ($ smtp_conn); exit;) $ data = get_data ($ smtp_conn); fputs ($ smtp_conn, "EHLO". $). config ["smtp_searcher"]. "rn"); $ code = substr (get_data ($ smtp_conn), 0.3000); if ($ code! = 250) (отпечатайте "EHLO Welcome error"; fclose ($ smtp_conn) ; изход; ) fputs ($ smtp_conn, "AUTH LOGINrn"); $ code = substr (get_data ($ smtp_conn), 0.3000); if ($ code! = 334) (отпечатайте "сървърът не позволи стартиране на оторизация"; fclose ($ smtp_conn); exit;) fputs ($ smtp_conn, base64_encode ("". $ config ["smtp_username"]. ""). "rn"); $ code = substr (get_data ($ smtp_conn), 0.3000) ; if ($ код! = 334) (отпечатайте "грешка при достъп до този потребител"; fclose ($ smtp_conn); exit;) fputs ($ smtp_conn, base64_encode ("". $ config ["smtp_password"]. ""). "rn"); $ код = substr (get_data ($ smtp_conn), 0,3000); if ($ код! = 235) (печат "не е валиден n арол"; fclose ($ smtp_conn); exit;) fputs ($ smtp_conn, "MAIL FROM:". $ config ["smtp_email"]. "rn"); $ код = substr (get_data ($ smtp_conn), 0,3000); if ($ code! = 250) (отпечатайте "сървърът отказа команда MAIL FROM"; fclose ($ smtp_conn); exit;) fputs ($ smtp_conn, "RCPT TO:". $ mail_to. "rn"); $ код = substr (get_data ($ smtp_conn), 0,3000); if ($ code! = 250 И $ code! = 251) (отпечатайте "Сървърът не прие командата RCPT TO"; fclose ($ smtp_conn); exit;) fputs ($ smtp_conn, "DATArn"); $ код = substr (get_data ($ smtp_conn), 0,3000); if ($ code! = 354) (отпечатайте "сървърът не прие ДАННИ"; fclose ($ smtp_conn); exit;) fputs ($ smtp_conn, $ заглавка. "rn". $ съобщение. "rn.rn"); $ код = substr (get_data ($ smtp_conn), 0,3000); if ($ code! = 250) (отпечатайте "грешка при изпращане на имейл"; fclose ($ smtp_conn); exit;) fputs ($ smtp_conn, "QUITrn"); fclose ($ smtp_conn); ) функция get_data ($ smtp_conn) ($ data = ""; докато ($ str = fgets ($ smtp_conn, 515)) ($ data. = $ str; if (substr ($ str, 3,1) == "" ) (прекъсване;)) връщане на $ данни;) $ text_email = " Току-що добавихте обява в mashintop.ru. Можете да го гледате тук
Вашият ключ: ". $ Key."

С този ключ можете да управлявате вашата реклама.

"; $ text_email. =" "; smtpmail (" [защитен с имейл]"," Ключът от рекламата на mashintop.ru ", $ text_email," yandex "); // използвайте Yandex smtpmail (" [защитен с имейл]"," Ключът от рекламата на mashintop.ru ", $ text_email," mail "); // използвайте пощата smtpmail (" [защитен с имейл]"," Ключът от рекламата на mashintop.ru ", $ text_email," rambler "); // използвайте rambler smtpmail (" [защитен с имейл]"," Ключът от рекламата на mashintop.ru ", $ text_email," gmail "); // но gmail не работи :(

Това е всичко, готовият скрипт е във вашите ръце, просто копирайте, променете стойностите на $ config масива и всичко ще работи добре.

Сега нека да разгледаме някои от елементите, които бих искал да подчертая.

Narpimer, грешката, която получаваме, когато се опитаме да изпратим чрез SMTP до Google. Първоначално виждаме следния текст за грешка:

За да видим нещо по-конкретно, нека модифицираме малко кода.

Fputs ($ smtp_conn, "AUTH LOGINrn"); $ код = substr (get_data ($ smtp_conn), 0,3000); echo $ код; if ($ код! = 334) (отпечатайте "сървърът не позволи да започне оторизация"; fclose ($ smtp_conn); изход;)

И накрая получаваме много конкретна грешка

530 5.7.0 Първо трябва да издаде команда STARTTLS. x4sm16408296lbn.2 - gsmtp

Какво точно означава - не знам, но вярвам, че нещо е свързано със защитена несигурна връзка. Как да се отърва от него - все още не знам, така че gmail не е победен в момента.



За да има възможност даден сайт да работи ефективно и продуктивно, към създаването му трябва да се подходи максимално отговорно и балансирано. Изборът на системата, която ще се използва при създаването на онлайн магазин, заслужава специално внимание. Факт е, че търговска платформа, специализирана в продажбата на стоки или услуги, трябва да ви позволи да внедрите цялата необходима функционалност и да бъде лесна за използване, както за администратори, занимаващи се с поддръжка и попълване на сайтове, така и за клиенти на онлайн магазини. Много хора и компании, които са изправени пред въпроса за избор на подходяща CMS за себе си, анализират: какво да изберат Magento или OkayCMS. Нека сравним характеристиките и възможностите на тези двигатели на сайтове.

Когато работите върху собствен уебсайт, човек или компания ще трябва да положи големи усилия - само в този случай можете да разчитате на положителни резултати и наистина ефективен инструмент. Един от основните въпроси, които трябва да бъдат решени още преди да започнете да създавате уебсайт, е как да изберете най-подходящата CMS опция. След това ще сравним две CMS: Joomla или OkayCMS, обърнете внимание на характеристиките на всеки от тях.

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

Когато се подготвяте да създадете свой собствен уебсайт или да отворите онлайн магазин, трябва да вземете предвид и анализирате много проблеми, както и да решите различни проблеми. Само в този случай можете да разчитате, че вашият проект ще доведе до положителни резултати и ще бъде в състояние да отговори напълно на очакванията. Сред различните въпроси, свързани с развитието на онлайн магазин, специално внимание заслужава въпросът с избора на CMS. За да ви е по-лесно да вземете решение за оптималния двигател за себе си, вътре

Когато планират да създадат собствен уебсайт за бъдещ онлайн магазин, доста голям брой хора и дори компании, специализирани в продажбите, са изправени пред труден и изключително важен избор: коя от съществуващите CMS да изберат. Ако мислите какво да изберете: PrestaShop или OkayCMS, предлагаме ви да прочетете тази статия, в която ще сравним тези две системи за създаване на интернет сайтове, по-специално онлайн магазини.

В някои случаи, за да тества или диагностицира работата на пощата, администраторът на поща трябва да провери изпращането на писма през техните Exchange сървъри (и не само) от определени хостове. Ако сървърът не изисква оторизация (сървър с отворен реле), можете да изпращате поща. Въпреки това, в повечето случаи пощенските сървъри изискват оторизация за изпращане на поща. В този пример ще покажем как да извършим удостоверяване на AUTH LOGIN на SMTP сървъра в telnet конзолата и да изпратим имейл.

AUTH ВХОД- в терминологията на Exchange това е основно удостоверяване, когато потребителското име и паролата се предават по мрежата в кодиран алгоритъм база 64форма. На повечето вътрешни Exchange сървъри администраторите не деактивират ОсновенУдостоверяване... Можете да проверите неговата поддръжка в настройките на конектора за получаване.

Забележка... Моля, имайте предвид, че нападателят, когато осъществява достъп до комуникационния канал, може лесно да прихване и дешифрира потребителските идентификационни данни, кодирани в Base64. Ето защо този метод за оторизация се препоръчва да се използва изключително в частни корпоративни мрежи.

За да влезем в пощенския сървър с помощта на AUTH LOGIN, трябва да преобразуваме потребителското име и паролата на потребителя, от който ще бъде изпратено съобщението, във формат Base64. Това може да стане с помощта на скриптове или онлайн услуги. Използвам сайта https://www.base64encode.org/.

потребителско име: [защитен с имейл] contoso.com, в Base64 кодиране се оказа: dGVzdHVzZXJAY29udG9zby5jb20 =

парола: $ нагоре3RsTr)ng- в Base64 JHVwM1JzVHIpbmc =

Сега в командния ред, използвайки Telnet, се свързваме с порт 25 (SMTP) на нашия пощенски сървър (ще маркирам въведените команди в синьо):

telnet mail.contoso.com 25

Ако е Exchange, той ще върне нещо подобно;

Нека се представим:

ehlo sender.contoso.com

Сървърът ще върне списък с поддържани типове упълномощаване и възможности. Както можете да видите, основното оторизиране (AUTH LOGIN) е в списъка.

250-mail.contoso.com Здравейте
250- РАЗМЕР 36700160
250-ТЪРБОВОД
250-DSN
250-ПОДОБРЕНИ СТАТУСКОДИ
250-STARTTLS
250-AUTH ВХОД
250-8BITMIME
250-BINARYMIME
250 РАЗДЕВАНЕ

AUTH ВХОД

Сървърът трябва да отговори:
334 VXNlcm5hbWU6

Сега вмъкваме потребителското име във формат Base64, който кодирахме по-рано:
dGVzdHVzZXJAY29udG9zby5jb20 =

Сървърът трябва да отговори:

334 UGFzc3dvcmQ6.

Сега е време да вмъкнете паролата във формат Base64:
JHVwM1JzVHIpbmc =

Ако потребителското име и паролата са правилни, сървърът ще отговори.
235 2.7.0 Удостоверяването е успешно

Ако не:

535 5.7.8 Грешка: удостоверяването не бе успешно: UGFzc3dvcmQ6

Сега можете да попълните стандартните полета на писмото:

поща от: [защитен с имейл]
250 2.1.0 Подателят ОК
rcpt до: [защитен с имейл]
250 2.1.5 Получателят ОК
данни
354 Стартиране на въвеждане на поща; завършва с.
от: TestUserovich
до: Администраторът< [защитен с имейл] >
Тема: Тествайте BASE SMTP, удостоверен чрез Telnet
Това е тест
.
250 2.6.0 Поща на опашка за доставка

ОТКАЗ

221 2.0.0 Затваряне на връзката.
Връзката е затворена от чужд хост.

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

Настройки за изпращане на поща чрез SMTP

Има случаи, когато създателите на сайтове се сблъскват с проблема с работата на електронната поща на сайта на CMS Joomla. Например, когато изпращате писмо чрез формата за обратна връзка, могат да се появят грешки от следния тип: „Не можа да се инстанцира функцията за поща“или „Неуспешно извикване на функция за поща“... Възможно е също да изпратите писмо без грешки, но в резултат то все още не достига до адресата.

Защо възникват тези проблеми с пощата? За да отговорите на този въпрос, трябва да преминете през следния път в контролния панел: "Система" - "Общи настройки" - раздел "Сървър" - раздел "Настройки на пощата".

CMS Joomla предоставя три механизма за изпращане на имейли: PHP Mail, Sendmail и SMTP. По подразбиране се използва PHP Mail, с който често възникват проблеми, които са свързани основно с настройките на използвания хостинг.

Въз основа на горното заключаваме: или се обръщаме за помощ към доставчика на хостинг услуги, или използваме метода Sendmail или SMTP за изпращане на писма. Нека се спрем на използването на SMTP.

Настройки за изпращане на поща чрез SMTP

SMTP (Simple Mail Transfer Protocol) е мрежов протокол, използван за прехвърляне на електронна поща. За да използвате SMTP, трябва правилно да зададете настройките за конкретния пощенски сървър, който ще се използва.

За да видите настройките на SMTP, изберете "SMTP" в "Метод за изпращане". Нека разгледаме всяка настройка на популярни пощенски сървъри: Yandex, Mail, Gmail, Rambler и Yahoo.

SMTP настройки за Yandex

  1. Имейл на сайта: пощенска кутия на yandex.ru, например: [защитен с имейл]
  2. SMTP сигурност: SSL
  3. Порт на SMTP сървъра: 465
  4. SMTP потребителско име: вход в пощенска кутия на yandex.ru, например: khasanov (без @ yandex.ru)
  5. SMTP сървър: smtp.yandex.ru

SMTP настройки за поща

  1. Имейл на сайта: пощенска кутия на mail.ru, например: [защитен с имейл]
  2. Подател на писмото: запис, който ще бъде показан в полето „Получател“ на адресата
  3. Деактивиране на изпращането по пощата: вкл./изкл. функции за масова поща
  4. Удостоверяване на SMTP сървър: Да
  5. SMTP сигурност: SSL
  6. Порт на SMTP сървъра: 465
  7. SMTP потребителско име: пощенска кутия на mail.ru, например: [защитен с имейл]
  8. SMTP парола: парола за пощенска кутия
  9. SMTP сървър: smtp.mail.ru

SMTP настройки за Gmail

  1. Имейл на сайта: пощенска кутия на gmail.com, например: [защитен с имейл]
  2. Подател на писмото: запис, който ще бъде показан в полето „Получател“ на адресата
  3. Деактивиране на изпращането по пощата: вкл./изкл. функции за масова поща
  4. Удостоверяване на SMTP сървър: Да
  5. SMTP сигурност: SSL
  6. Порт на SMTP сървъра: 465
  7. SMTP потребителско име: пощенска кутия в gmail.com, например: [защитен с имейл]
  8. SMTP парола: парола за пощенска кутия
  9. SMTP сървър: smtp.gmail.com

SMTP настройки за Rambler

  1. Имейл на сайта: пощенска кутия на rambler.ru, например: [защитен с имейл]
  2. Подател на писмото: запис, който ще бъде показан в полето „Получател“ на адресата

В PHP е доста популярно да се използват скриптове, които автоматизират процеса на изпращане на писма. В тази статия ще разгледаме прост скрипт, който изпраща писма до пощата на получателите чрез SMTP ( Прост протокол за прехвърляне на поща ). Би било твърде лесно да се ограничим само до тази функционалност, скриптът поддържа и прикачени файлове, тоест можете да прикачите pdf, txt или doc файл в писмото си.

Настройката на скрипта е доста проста, трябват ви само данните на подателя, вход, парола от имейла, от който ще се изпращат писма.

Скриптът работи с класа km_smtp_class.php, класът е добър, защото поддържа различни SSL и TLS протоколи, които осигуряват сигурно предаване на данни.

Ето и самия скрипт:

"smtp.mail.ru", "SMTP_port" => "25", "SMTP_email" => " [защитен с имейл]"," SMTP_pass "=>" 1111111 "," SMTP_type "=>" null "); // Имейл на получателя $ Receiver =" [защитен с имейл]"; // Тема на съобщението $ Subject =" Изпращане на имейл от PHP "; // Текст на съобщението (в HTML) $ Text =" Здравейте!
Съобщението е изпратено от скрипт МоушонСайт: http: // сайт "; // Прикачен файл в писмото - адресът към файла $ Attachment =" "; / * $ mail = нов KM_Mailer (сървър, порт, потребител, парола, тип); * / / * Типът може да бъде: null, tls или ssl * / $ mail = new KM_Mailer ($ SenderConfig ["SMTP_server"], $ SenderConfig ["SMTP_port"], $ SenderConfig ["SMTP_email"], $ SenderConfig ["SMTP_pass"], $ SenderConfig [" SMTP_type "]); if ($ mail-> isLogin) (// Прикачете файл if ($ Attachment) ($ mail-> addAttachment ($ Attachment);) // Добавяне на още получатели $ mail-> addRecipient (" [защитен с имейл]"); $ mail-> addRecipient (" [защитен с имейл]"); / * $ mail-> изпрати (От, За, Тема, Текст, Заглавие = по избор) * / $ SendMail = $ mail-> изпрати ($ SenderConfig [" SMTP_email "], $ Получател, $ Тема, $ Текст ); // Изчистване на списъка с получатели $ mail-> clearRecipients (); $ mail-> clearCC (); $ mail-> clearBCC (); $ mail-> clearAttachments ();) друго (ехо "Възникна грешка, докато свързване към SMTP сървър ";)?>

Настройките на скрипта се базират основно на масива $ SenderConfig, тук трябва да посочим SMTP: сървър, порт, потребителско име и парола от e-mail. Нека опишем всеки ключ от масива:

SMTP_server - адрес на SMTP сървър (индивидуален адрес за различни имейли)

Mail.ru поща: smtp.mail.ru порт: 25, 587 и 465 (със SSL криптиране)

поща на Yandex: smtp.yandex.ru порт: 25, 587 465 (SSL порт)

Rambler Mail: mail.rambler.ru порт: 25, 587 465 (SSL порт)

Yahoo поща: smtp.mail.yahoo.com SSL порт: 465

(Ако имате нужда от адреса на smtp сървъри, които не са в списъка - пишете в коментарите)

SMTP_port - Вече го описахме отгоре за всеки smtp сървър.

SMTP_email - би било по-точно да съм потребител, но за по-голяма яснота написах имейл, посочваме имейл адреса.

SMTP_pass – Паролата от имейла, посочена като стойност в ключа SMTP_email


SMTP_type - NULL по подразбиране. Протоколът, по който ще бъдат изпратени писмата. Протоколи: SSL и TLS

Прикачените файлове към писмото могат да се добавят просо, като посочите пълния адрес на файла в променливата $ Attachment (/var/patch/to/file/File.pdf)

Ако имате въпроси, пишете ги в коментарите по-долу.



Свързани статии: