Odesílání pošty přes smtp třetí strany. Odesílání pošty přes SMTP v PHP

Dlouho jsem hledal řešení, jak odesílat dopisy uživatelům ne prostřednictvím funkce mail () v PHP, ale prostřednictvím SMTP poštovní servery. Na internetu není tolik různorodých informací, ale to, co tam je, tak úplně nefunguje, nebo nefunguje vůbec. Proto jsem dal vše dohromady a napsal svůj kód na základě hotových, které jsou prezentovány na stránkách.

Proč posílat přes SMTP a ne mail()

Moje odpověď je docela jednoduchá - viry po nějakou dobu posílaly přes můj server tuny dopisů, což vedlo k zablokování mé IP adresy mnoha mailerům, zejména z gmail.com, a v souvislosti s tím mohli uživatelé dostávat dopisy, tak jsem musel hledat alternativu a našel jsem ji - je to SMTP

Mohlo by vás zajímat, proč je můj scénář lepší než ostatní, které se povalují na prostranstvích?! odpovím

  1. Funguje to s yandexem, ramblerem, poštou (gmail nemohl vyhrát)
  2. Srozumitelný kód. Chcete-li jej nastavit, stačí změnit několik řádků
  3. Odesílá e-maily ve formátu HTML

Zde jsou výhody mého scénáře, který jsem na internetu žádné nenašel, ale z každého jsem si vzal vše potřebné. Pojďme se tedy podívat na kód.

Funkce smtpmail($mail_to, $předmět, $message, $service="yandex") ( $config["smtp_charset"] = "windows-1251"; //kódování zprávy. (nebo UTF-8 atd.) $config[ "smtp_from"] = "mashintop.ru"; //Vaše jméno - nebo název vašeho webu. Zobrazí se při přečtení v poli "Od" $config["smtp_debug"] = false; //Pokud chcete viz chybové zprávy, nastavte true namísto false $config["smtp_port"] = "25"; // Operační port. Neměňte, pokud si nejste jisti, zda ($service=="yandex") ( $config[ "smtp_searcher"] = "yandex. en"; $config["smtp_email"] = " [e-mail chráněný]"; $config["smtp_username"] = "mashintop"; //Změna názvu vaší poštovní schránky. $config["smtp_host"] = "smtp.yandex.ru"; //server pro odesílání pošty $config[" smtp_password "] = "moi_parol"; //Změňte své heslo ) elseif($service=="rambler") ( $config["smtp_searcher"] = "rambler.ru"; $config["smtp_email"] = " [e-mail chráněný]"; $config["smtp_username"] = "mashintop"; //Změna názvu vaší poštovní schránky. $config["smtp_host"] = "smtp.rambler.ru"; //server pro odesílání pošty $config[" smtp_password "] = "moi_parol"; //Změňte své heslo ) elseif($service=="mail") ( $config["smtp_searcher"] = "mail.ru"; $config["smtp_email"] = " [e-mail chráněný]"; $config["smtp_username"] = "mashintop"; //Změna názvu vaší poštovní schránky. $config["smtp_host"] = "smtp.mail.ru"; //server pro odesílání pošty $config[" smtp_password "] = "moi_parol"; //Změňte si heslo ) elseif($service=="gmail") ( $config["smtp_searcher"] = "gmail.com"; $config["smtp_email"] = " [e-mail chráněný]"; $config["smtp_username"] = "alexeybertram"; //Změna názvu vaší poštovní schránky. $config["smtp_host"] = "smtp.gmail.com"; //server pro odesílání pošty $config["smtp_password " ] = "moi_parol"; //Změnit heslo ) $header="Datum: ".date("D, j MYG:i:s")." +0700rn"; $header.="Od: =?windows-1251?Q?".str_replace("+","_",str_replace("%","=",urlencode("".$config[" smtp_from"]."")))"?=<".$config["smtp_email"].">rn"; $header.="XMailer: Netopír! (v3.99.3) Professionalrn"; $header.="Odpovědět: =?windows-1251?Q?".str_replace("+","_",str_replace("%","=",urlencode(" ".$config["smtp_from"]."")))"?=<".$config["smtp_email"].">rn"; $header.="Priorita X: 3 (normální)rn"; $header.="ID-zprávy:<172562218.".date("YmjHis")."@".$config["smtp_searcher"].">rn"; $header.="To: =?windows-1251?Q?".str_replace("+","_",str_replace("%","=",urlencode("")))."? =<$mail_to>rn"; $header.="Předmět: =?windows-1251?Q?".str_replace("+","_",str_replace("%","=",urlencode("".$subject."" )))."?=rn"; $header.="MIME-Verze: 1.0rn"; $header.="Typ obsahu: text/html; charset=windows-1251rn"; $header.="Content-Transfer-Encoding: 8bitrn"; $smtp_conn = fsockopen("".$config["smtp_host"]."", $config["smtp_port"],$errno $ config["smtp_searcher"]."rn"); $code = substr(get_data($smtp_conn),0,3000); if($code != 250) (tisk "EHLO ahoj chyba"; fclose($smtp_conn) ; exit;) fputs($smtp_conn,"AUTH LOGINrn"); $code = substr(get_data($smtp_conn),0,3000); if($code != 334) (tisk "server nepovolil spuštění autorizace"; fclose ($smtp_conn); exit;) fputs($smtp_conn,base64_encode("".$config["smtp_username"]."")."rn"); $code = substr(get_data($smtp_conn),0,3000 ) ; if($code != 334) (vytisknout "chyba při přístupu k tomuto uživateli"; fclose($smtp_conn); exit;) fputs($smtp_conn,base64_encode("".$config["smtp_password"].""). "rn"); $code = substr(get_data($smtp_conn),0,3000); if($code != 235) (tisk "není platné n" arol"; fclose($smtp_conn); exit;) fputs($smtp_conn,"MAIL FROM:".$config["smtp_email"]."rn"); $code = substr(get_data($smtp_conn),0,3000); if($code != 250) (tisk "server odmítl příkaz MAIL FROM"; fclose($smtp_conn); exit;) fputs($smtp_conn,"RCPT TO:".$mail_to."rn"); $code = substr(get_data($smtp_conn),0,3000); if($code != 250 AND $code != 251) (tisk "Server nepřijal příkaz RCPT TO"; fclose($smtp_conn); exit;) fputs($smtp_conn,"DATArn"); $code = substr(get_data($smtp_conn),0,3000); if($code != 354) (tisk "server nepřijal DATA"; fclose($smtp_conn); exit;) fputs($smtp_conn,$header."rn".$message."rn.rn"); $code = substr(get_data($smtp_conn),0,3000); if($code != 250) (tisk "chyba při odesílání e-mailu"; fclose($smtp_conn); exit;) fputs($smtp_conn,"QUITrn"); fclose($smtp_conn); ) funkce get_data($smtp_conn) ( $data=""; while($str = fgets($smtp_conn,515)) ( $data .= $str; if(substr($str,3,1) == " " ) ( break; ) ) return $data; ) $text_email = " Právě jste přidali inzerát na mashintop.ru. Můžete si jej prohlédnout zde
Váš klíč: ".$key."

Přes daný klíč budete moci spravovat svou reklamu.

"; $text_email .= " "; smtpmail(" [e-mail chráněný]", "Klíč z reklamy na mashintop.ru", $text_email, "yandex"); //použijte Yandex smtpmail(" [e-mail chráněný]", "Klíč z reklamy na mashintop.ru", $text_email, "mail"); //použijte mail smtpmail(" [e-mail chráněný]", "Klíč z reklamy na mashintop.ru", $text_email, "rambler"); //použijte rambler smtpmail(" [e-mail chráněný]", "Klíč z reklamy na mashintop.ru", $text_email, "gmail"); // ale gmail nefunguje :(

To je vše, hotový skript je ve vašich rukou, stačí jej zkopírovat, změnit hodnoty pole $config a vše bude fungovat.

Nyní se podívejme na některé prvky, na které bych se rád zaměřil.

Například chyba, kterou dostáváme, když se pokoušíme odeslat přes google SMTP. Na začátku vidíme následující text chyby:

Abychom viděli něco konkrétnějšího, upravme trochu kód.

Fputs($smtp_conn,"AUTH LOGINrn"); $code = substr(get_data($smtp_conn),0,3000); echo $kód; if($code != 334) (tisknout "server nepovolil spuštění autorizace"; fclose($smtp_conn); exit;)

A skončíme s velmi konkrétní chybou

530 5.7.0 Nejprve je nutné zadat příkaz STARTTLS. x4sm16408296lbn.2 – gsmtp

Co to přesně znamená - nevím, ale věřím, že něco souvisí s bezpečným, nezabezpečeným připojením. Jak se toho zbavit - zatím nevím, takže gmail zůstal v tuto chvíli neporažen.



Aby určitá stránka měla možnost pracovat efektivně a produktivně, mělo by se k její tvorbě přistupovat co nejzodpovědněji a nejvyváženěji. Zvláštní pozornost si zaslouží výběr systému, který bude použit při vytváření internetového obchodu. Faktem je, že komerční platforma specializující se na prodej zboží nebo služeb by vám měla umožnit implementovat veškerou potřebnou funkcionalitu a být snadno použitelná, a to jak pro správce podílející se na údržbě a plnění stránek, tak pro zákazníky internetových obchodů. Mnoho lidí a společností, které stojí před otázkou výběru správného CMS pro sebe, analyzuje, zda zvolit Magento nebo OkayCMS. Porovnejme vlastnosti a možnosti těchto enginů pro stránky.

Při práci na vlastním webu bude muset člověk nebo společnost vynaložit velké úsilí - pouze v tomto případě se můžete spolehnout na pozitivní výsledky a získání skutečně účinného nástroje. Jedna ze zásadních otázek, kterou je nutné vyřešit před zahájením tvorby webu, je, jak se rozhodnout pro nejvhodnější variantu CMS. Dále porovnáme dva CMS: Joomla nebo OkayCMS, věnujte pozornost funkcím každého z nich.

Mít vlastní webové stránky je jedním ze základních požadavků efektivního a úspěšného podnikání. Statistiky jednoznačně svědčí ve prospěch nárůstu počtu nákupů různého zboží a objednávek služeb přes internet. S ohledem na tuto skutečnost si již většina komerčních společností uvědomuje nutnost mít vlastní webové stránky. Pouhá skutečnost, že existuje internetový zdroj, však nestačí k tomu, abychom mohli počítat s jeho efektivitou, ziskovostí a očekávanými přínosy pro podnikání.

Při přípravě na vytvoření vlastního webu nebo otevření internetového obchodu musíte vzít v úvahu a analyzovat spoustu problémů a také vyřešit různé problémy. Pouze v tomto případě se můžete spolehnout na to, že váš projekt přinese pozitivní výsledky a bude schopen plně naplnit očekávání. Mezi různými problémy souvisejícími s rozvojem internetového obchodu si zvláštní pozornost zaslouží otázka výběru CMS. Abychom vám usnadnili rozhodování o optimálním motoru pro vás v rámci

Při plánování vytvoření vlastních webových stránek pro budoucí internetový obchod se poměrně velké množství lidí a dokonce i společností specializujících se na prodej potýká s obtížným a extrémně důležitá volba: který ze stávajících CMS zvolit. Pokud přemýšlíte, zda zvolit PrestaShop nebo OkayCMS, doporučujeme vám nahlédnout do tohoto článku, ve kterém porovnáme tyto dva systémy pro tvorbu internetových stránek, zejména internetových obchodů.

V některých případech, aby mohl otestovat nebo diagnostikovat fungování pošty, musí správce pošty zkontrolovat odesílání dopisů prostřednictvím svých serverů Exchange (nejen) z určitých hostitelů. V případě, že server nevyžaduje autorizaci (open-relay server), můžete odeslat poštu. Ve většině případů však poštovní servery vyžadují autorizaci k odesílání pošty. V tomto příkladu si ukážeme, jak provést ověření AUTH LOGIN na serveru SMTP v konzole telnet a odeslat e-mail.

AUTH PŘIHLÁŠENÍ- v terminologii Exchange jde o základní autentizaci, kdy se uživatelské jméno a heslo přenáší po síti v zakódovaném algoritmu základ 64 formulář. Na většině domácích Exchange servery správci nezakazují ZákladníAutentizace. Jeho podporu si můžete ověřit v nastavení přijímacího konektoru.

Poznámka. Vezměte prosím na vědomí, že při přístupu ke komunikačnímu kanálu může útočník snadno zachytit a dešifrovat uživatelské přihlašovací údaje zakódované v Base64. Tento způsob autorizace se proto doporučuje používat pouze v privátních podnikových sítích.

Pro autorizaci na poštovním serveru pomocí AUTH LOGIN potřebujeme převést uživatelské jméno a heslo uživatele, ze kterého bude dopis odeslán, do formátu Base64. To lze provést pomocí skriptů popř online služby. Využívám stránky https://www.base64encode.org/ .

uživatelské jméno: [e-mail chráněný] contoso.com, v kódování Base64 se ukázalo: dGVzdHVzZXJAY29udG9zby5jb20=

Heslo: $ nahoru3RsTr)ng- v Base64 JHVwM1JzVHIpbmc=

Nyní se v příkazovém řádku pomocí Telnetu připojíme k portu 25 (SMTP) našeho poštovního serveru (zadané příkazy zvýrazním modře):

telnet mail.contoso.com 25

Pokud je to Exchange, vrátí něco jako;

Pojďme se představit:

ehlo sender.contoso.com

Server vrátí seznam podporovaných typů oprávnění a schopností. Jak vidíte, základní oprávnění (AUTH LOGIN) je na seznamu.

250-mail.contoso.com Dobrý den
250-VELIKOST 36700160
250-POTRUBÍ
250-DSN
250-ZLEPŠENÉ STAVOVÉ KÓDY
250 STARTTLS
PŘIHLÁŠENÍ 250-AUTH
250-8BITMIME
250-BINARYMIME
250 CHUNKING

AUTH PŘIHLÁŠENÍ

Server by měl odpovědět:
334 VXNlcm5hbWU6

Nyní vložte uživatelské jméno Base64, které jsme zakódovali dříve:
dGVzdHVzZXJAY29udG9zby5jb20=

Server by měl odpovědět:

334 UGFzc3dvcmQ6.

Nyní je čas vložit heslo ve formátu Base64:
JHVwM1JzVHIpbmc=

Pokud jsou uživatelské jméno a heslo správné, server odpoví.
235 2.7.0 Autentizace byla úspěšná

Pokud ne:

535 5.7.8 Chyba: ověření se nezdařilo: UGFzc3dvcmQ6

Nyní můžete vyplnit standardní pole dopisu:

mail od: [e-mail chráněný]
250 2.1.0 Odesílatel je v pořádku
rcpt na: [e-mail chráněný]
250 2.1.5 Příjemce je v pořádku
data
354 Spustit zadávání pošty; Konec s.
od: TestUserovich
komu: TheAdmin< [e-mail chráněný] >
Předmět: Test BASE SMTP ověřen přes Telnet
Toto je test
.
250 2.6.0 Pošta ve frontě k doručení

PŘESTAT

221 2.0.0 Uzavírací spojení.
Spojení ukončeno cizím hostitelem.

To je vše, zkušební dopis by měl být úspěšně doručen do poštovní schránky příjemce.

nastavení pošty SMTP

Existují případy, kdy se tvůrci stránek potýkají s problémem práce na e-mailových stránkách na CMS Joomla. Například při odesílání dopisu prostřednictvím formuláře zpětné vazby se mohou objevit chyby následujícího typu: "Nelze vytvořit instanci funkce pošty" nebo "Nelze zavolat funkci pošty". Je také možné poslat dopis bez chyb, ale ve výsledku stejně nedorazí k adresátovi.

Proč k těmto problémům s poštou dochází? Chcete-li odpovědět na tuto otázku, musíte přejít na ovládací panel po následující cestě: "Systém" - "Obecná nastavení" - karta "Server" - část "Nastavení pošty".

Joomla CMS poskytuje tři mechanismy pro odesílání e-mailů: PHP Mail, Sendmail a SMTP. Standardně se používá PHP Mail, který často způsobuje problémy, které souvisí především s nastavením používaného hostingu.

Na základě výše uvedeného docházíme k závěru: buď se obrátíme o pomoc na poskytovatele hostingu, nebo použijeme metodu odesílání e-mailů Sendmail nebo SMTP. Zaměřme se na používání SMTP.

Nastavení pro odesílání pošty pomocí SMTP

SMTP (anglicky Simple Mail Transfer Protocol) je síťový protokol používaný k přenosu elektronické pošty. Chcete-li používat SMTP, musíte správně nastavit nastavení konkrétního poštovního serveru, který bude použit.

Chcete-li zobrazit nastavení SMTP, musíte vybrat "SMTP" v "Způsob odeslání". Zvažte každé nastavení oblíbených poštovních serverů: Yandex, Mail, Gmail, Rambler a Yahoo.

Nastavení SMTP pro Yandex

  1. E-mail webu: poštovní schránka na yandex.ru, například: [e-mail chráněný]
  2. Zabezpečení SMTP: SSL
  3. Port serveru SMTP: 465
  4. Uživatelské jméno SMTP: přihlášení k poštovní schránce yandex.ru, například: khasanov (bez @yandex.ru)
  5. Server SMTP: smtp.yandex.ru

Nastavení SMTP pro poštu

  1. E-mail webu: poštovní schránka na mail.ru, například: [e-mail chráněný]
  2. Odesílatel dopisu: záznam, který se příjemci zobrazí v poli „Odesílatel“.
  3. Zakázat zasílání pošty: zapnuto / vypnuto. funkce hromadné pošty
  4. Autorizace na serveru SMTP: Ano
  5. Zabezpečení SMTP: SSL
  6. Port serveru SMTP: 465
  7. Uživatelské jméno SMTP: poštovní schránka na mail.ru, například: [e-mail chráněný]
  8. Heslo pro SMTP: heslo poštovní schránky
  9. Server SMTP: smtp.mail.ru

Nastavení SMTP pro Gmail

  1. E-mail webových stránek: poštovní schránka na gmail.com, například: [e-mail chráněný]
  2. Odesílatel dopisu: záznam, který se příjemci zobrazí v poli „Odesílatel“.
  3. Zakázat zasílání pošty: zapnuto / vypnuto. funkce hromadné pošty
  4. Autorizace na serveru SMTP: Ano
  5. Zabezpečení SMTP: SSL
  6. Port serveru SMTP: 465
  7. Uživatelské jméno SMTP: poštovní schránka na gmail.com, například: [e-mail chráněný]
  8. Heslo pro SMTP: heslo poštovní schránky
  9. Server SMTP: smtp.gmail.com

Nastavení SMTP pro Rambler

  1. E-mail webu: poštovní schránka na rambler.ru, například: [e-mail chráněný]
  2. Odesílatel dopisu: záznam, který se příjemci zobrazí v poli „Odesílatel“.

V PHP je docela populární používat skripty, které automatizují proces odesílání emailů. V tomto článku se budeme zabývat jednoduchým skriptem, který odesílá e-maily příjemcům přes SMTP( Jednoduchý protokol pro přenos pošty ). Omezit se na tuto funkcionalitu by bylo příliš snadné, skript podporuje i přílohy, to znamená, že můžete připojit pdf, txt popř. soubor doc ve vašem dopise.

Nastavení skriptu je celkem jednoduché, potřebujete pouze údaje odesílatele, přihlašovací jméno, heslo od E-mailem ze kterého budou dopisy odesílány.

Skript pracuje s třídou km_smtp_class.php, třída je dobrá, protože podporuje různé protokoly SSL a TLS, které zajišťují bezpečný přenos dat.

Zde je samotný skript:

"smtp.mail.ru", "SMTP_port" => "25", "SMTP_email" => " [e-mail chráněný]", "SMTP_pass" => "1111111", "SMTP_type" => "null"); // E-mail příjemce $Receiver = " [e-mail chráněný]"; // Předmět zprávy $Subject = "Odesílání e-mailu z PHP"; // Text zprávy (v HTML) $Text = "Ahoj!
Zpráva odeslaná ze skriptu Mowshon Web: http://site"; // Příloha v dopise - adresa k souboru $Attachment = ""; /* $mail = nový KM_Mailer(server, port, uživatel, heslo, typ); */ /* Typ může být: null, tls nebo ssl */ $mail = new KM_Mailer($SenderConfig["SMTP_server"], $SenderConfig["SMTP_port"], $SenderConfig["SMTP_email"], $SenderConfig["SMTP_pass"], $ SenderConfig[" SMTP_type"]); if($mail->isLogin) ( // Připojit soubor if($Attachment) ($mail->addAttachment($Attachment);) // Přidat další příjemce $mail->addRecipient(" [e-mail chráněný]"); $mail->addRecipient(" [e-mail chráněný]"); /* $mail->send(Od, Komu, Předmět, Text, Záhlaví = volitelné) */ $SendMail = $mail->send($SenderConfig["SMTP_email"], $Receiver, $Předmět, $Text ); // Vymazání seznamu příjemců $mail->clearRecipients(); $mail->clearCC(); $mail->clearBCC(); $mail->clearAttachments(); ) else ( echo "Došlo k chybě při připojení k serveru SMTP"; ) ?>

Nastavení skriptu je založeno hlavně na poli $SenderConfig, zde musíme specifikovat SMTP: server, port, email login a heslo. Pojďme si popsat každý klíč pole:

SMTP_server - adresa SMTP serveru (individuální adresa pro různé e-maily)

Mail.ru mail: Port smtp.mail.ru: 25, 587 a 465 (se šifrováním SSL)

Yandex mail: Port smtp.yandex.ru: 25, 587 465 (port SSL)

Rambler Mail: port mail.rambler.ru: 25, 587 465 (port SSL)

Yahoo Mail: smtp.mail.yahoo.com SSL port: 465

(Pokud potřebujete adresu smtp serverů, které nejsou v seznamu - napište do komentářů)

SMTP_port - Již jsme to popsali výše pro každý smtp server.

SMTP_email - byl by přesnější uživatel, ale pro přehlednost jsem napsal email, uveďte emailovou adresu.

SMTP_pass – Heslo pro e-mail, které bylo zadáno jako hodnota v klíči SMTP_email


SMTP_type - ve výchozím nastavení NULL. Protokol, podle kterého budou dopisy zasílány. Protokoly: SSL a TLS

Přílohy k dopisu lze přidat zadáním úplné adresy k souboru v proměnné $Attachment (/var/patch/to/file/File.pdf)

Pokud máte nějaké dotazy, napište je do komentářů níže.



Související články: