Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: ubuntu 14 lamp php email  (Přečteno 3645 krát)

mlaticka

  • Návštěvník
  • Příspěvků: 8
ubuntu 14 lamp php email
« kdy: 14 Listopadu 2015, 14:48:02 »
Ahoj , potřebuju poradit jak mám rozjet na LAMP serveru na UBUNTU 14 LTS odesilani emailu s pomoci PHP.
Ve woknech jsem nainstaloval server zadal smtp server a jelo to ,ale po přechodu na UBUNTU Mi to nejde , zkoušel jsem přepsat SENDMAILPATH: /usr/sbin/sendmail NEBO NA  /usr/lib/sendmail tak jak je to v PHP manualu ale nejde to, tyto soubory tam ani nemám , tak jsem zkoušel tyto soubory najit v synapticu ale je u nich červený vykřičník => stav- problemové, verze=> nedostupne, velikost=> nedostupné. Potřeboval bych radu jak nastavit email na UBUNTU, jak se to dělá a možná by neškodilo sepsat nějaký tutoriál pro ostatní jak se nastavuje email na ubuntu a někam bych to tady na fóru přišpendlil. Předem dík za rady

Martin - ViPEr*CZ*

Re:ubuntu 14 lamp php email
« Odpověď #1 kdy: 15 Listopadu 2015, 10:58:48 »
Použijte raději phpmailer a nastavte mu externí smtpéčko. Předpokládám, že jde o Váš lokální PC pro vývoj. Ostatně to samé případně můžete udělat na serverové mašině. Bude to lepší, protože email problematika je poměrně složitá a než se to naučíte ušetříte si spoustu potíží.
Open source is gold way... Mint 17.2, Debian 8.1 Jessie| Ubuntu Wiki (návody) | Google vyhledávač | Qt4 návody

mlaticka

  • Návštěvník
  • Příspěvků: 8
Re:ubuntu 14 lamp php email
« Odpověď #2 kdy: 15 Listopadu 2015, 13:25:14 »
Protože se mi podařilo problém s odesíláním emailu s pomocí PHP vyřešit, dám sem návod , o který jsem prosil ,sám.
Návod je pro ty, kteří čerstvě přešli z WINDOWS na LINUX UBUNTU 14 LTS a zcela jistě také narazili na tento problém.
Ve WINDOWS jste jednoduše nainstalovali web server (já používal COMPLEX WEB SERVER) a poté stačilo upravit konfigurační soubor php.ini kde se jen vyplnil smtp server přes který jste chtěli poštu odesílat, ovšem toto neplatí u LAMP SERVERU respektive UBUNTU 14 LTS.
Na řešení jsem přišel  náhodou, přes debuger  programu GEANY, je to light weight IDE pro tvorbu php scriptů. Jsem s ním velice spokojený je rychlý a má spoustu vychytávek pro psaní PHP scriptů.
Když jsem spustil svůj testovací script pro odesílání emailů, GEANY nahlásila v terminálu problém s nenalezením souboru SENDMAIL, přesně ->  /usr/sbin/sendmail, soubor tam pochopitelně nebyl, protože při instalaci systému UBUNTU 14 LTS se SENDMAIL  automaticky neinstaluje.
Uvedu zde pár kroků které povedou k vyřešení problému a doplním ještě nejaké informace k funkci mail() která se stará o odesílání emailů v PHP jazyku.
1) Nainstalujte si balík Synaptic, je v repozitáři Ubuntu 14 lts (centrum softwaru pro Ubuntu), prgm je free
2)V levé rolovací nabídce vyberte kategorii EMAIL(universe)
3)V pravém okně vyhledejte balík SENDMAIL, kliknutím na zaškrtávací pole vyberete "připravit k instalaci"
4)V horní nabídce akcí prgmu Synaptic klikněte na POUŽÍT. Balík je nainstalován.
5)Jako ROOT otevřete konfigurační soubor php.ini . cesta je - /etc/php5/apache2/php.ini a vyhledejte následující řádky:
[mail function]
; For Win32 only.
; http://php.net/smtp
SMTP = smtp.dkm.cz
; http://php.net/smtp-port
smtp_port = 25

; For Win32 only.
; http://php.net/sendmail-from
;sendmail_from = whiterabbit1@seznam.cz

; For Unix only.  You may supply arguments as well (default: "sendmail -t -i").
; http://php.net/sendmail-path
;sendmail_path =

; Force the addition of the specified parameters to be passed as extra parameters
; to the sendmail binary. These parameters will always replace the value of
; the 5th parameter to mail(), even in safe mode.
;mail.force_extra_parameters =

; Add X-PHP-Originating-Script: that will include uid of the script followed by the filename
mail.add_x_header = On

; The path to a log file that will log all mail() calls. Log entries include
; the full path of the script, line number, To address and headers.
;mail.log =
; Log mail to syslog (Event Log on NT, not valid in Windows 95).
;mail.log = syslog

Nejdříve si nastavte v řádku SMTP server který využijete odesílání zpráv, já mám UPC proto využívám jejich smtp.dkm.cz
v mém případě je  tedy -> SMTP = smtp.dkm.cz
Poté odkomentujte řádek ;sendmail_path =
Do tohoto řádku napište cestu k sendmail souboru /usr/sbin/sendmail ovšem musíte ješte zapsat váš email kvuli ověření pro servery které poštu příjmají, v mém případě je tedy zápis takovýto
sendmail_path =  /usr/sbin/sendmail -t -i -fmujmail@seznam.cz
Uložte a to samé opakujte v druhém konfiguračním souboru který je umístěn v /etc/php5/cli/php.ini
Vtomto druhém konfiguračním souboru není podmínkou mít určen smtp a cestu k sendmail, pouze pokud budete na svém serveru CLI využívat. Ve zkratce jen nastíním že CLI slouží ke spouštění scriptů v SHELL(TERMINÁL) http://www.php-cli.com/
teď je  již vše hotové a vše by mělo běžet bez problémů.
6)Tento šestý bod berte jen jako doplňující informaci k PHP  funkci mail() která se stará o odesílání emailů.
Pro odesílání emailů je potřebná funkce mail() nebo mb_send_mail(), také knihovna PHPmailer http://phpmailer.worxware.com/ ale tuto knihovnu zde rozebírat nebudu.
Ve zkratce chci jen dodat že pokud vám ani tak PHP emaily neodesílá tak si zkontrolujte jestli máte vyplněný čtvrtý nepovinný parametr funkce mail(). Říká se mu nepovinný ale já mu dnes už říkám nutný ,protože se  v tomto parametru odesílají hlavičky emailu které slouží k identifikaci nebo také moho posílat přílohy emailu, hlavičky mohou odesílat informaci o kódování apod.
Ukážu zde dvě testovací varianty, jednu pro email který obsahuje html znaky a druhý který odesílá přílohu.
Tyto ukázky jsou ke stažení kdekoliv na internetu , jde mi jen o to ukázat jak by měli hlavičky vypadat aby se email úspěšně odeslal.Tyto scripty nepoužívejte v ostrém provozu, nejsou vůbec zabezpečené.
add1-
Kód: [Vybrat]
$to = "mujmail@seznam.cz";
$subject = 'test emailu';

$message = str_replace("\r\n","<br>",$fread);
$message = str_replace("-"," ",$message);
         $message = wordwrap($message, 200, "\r\n");

          $headers = "From: mujmail@seznam.cz \r\n";
          $headers .= "CC: nekohomaila@seznam.cz \r\n";
          $headers .= "MIME-Version: 1.0\r\n";
          $headers .= "Content-Type: text/html; charset=utf-8\r\n"; //kodovani+ html

          mail($to, $subject, $message, $headers);

add2-
Kód: [Vybrat]
<?php
//NACTENI SOUBORU DO PROMENNE A ZAKODOVANI POMOCI MIME BASE64
$attachment_name 'priloha.pdf';
$fp FOpen ($attachment_name'r');
$contents FRead ($fpFileSize($attachment_name));
$contents Chunk_Split(Base64_Encode($contents));
FClose ($fp);

$address 'email@neco.cz';
$subject 'Email s prilohou';

$headers "From:  Odesilatel <email.odesilatele@neco.cz>\n";
$headers .= "Reply-To: <email.odesilatele@neco.cz>\n";
$headers .= "MIME-Version: 1.0\n";
$headers .= "Content-Type: multipart/related; type=\"multipart/alternative\"; boundary=\""
           
."----=MIME_BOUNDRY_main_message\"\n";
$headers .= "X-Sender: Odesilatel <email.odesilatele@neco.cz>\n";
$headers .= "X-Mailer: PHP4\n";
$headers .= "X-Priority: 3\n"//Priorita emailu 1 = Urgentni, 3 = Normalni
$headers .= "Return-Path: <email.odesilatele@neco.cz>\n";
$headers .= "This is a multi-part message in MIME format.\n";
$headers .= "------=MIME_BOUNDRY_main_message \n";
$headers .= "Content-Type: multipart/alternative; boundary=\""
           
."----=MIME_BOUNDRY_message_parts\"\n";

$message "------=MIME_BOUNDRY_message_parts\n";
$message .= "Content-Type: text/plain; charset=\"iso-8859-1\"\n";
$message .= "Content-Transfer-Encoding: quoted-printable\n";
$message .= "\n";
$message .= "\n";
$message .= "\n";
$message .= "------=MIME_BOUNDRY_message_parts--\n";
$message .= "SEM MUZETE ZADAT TEXT EMAILU\n";
$message .= "------=MIME_BOUNDRY_main_message\n";
$message .= "Content-Type: application/octet-stream;\n\tname=\"" $attachment_name "\"\n";
$message .= "Content-Transfer-Encoding: base64\n";
$message .= "Content-Disposition: attachment;\n\tfilename=\"" $attachment_name "\"\n\n";
$message .= $contents//Zakodovana priloha
$message .= "\n";
$message .= "------=MIME_BOUNDRY_main_message--\n";

//ODESLANI EMAILU
if (mail($address$subject$message$headers))
{
  print 
'Email byl úspěšně odeslán.';
}
else
{
  print 
'Došlo k chybě!';

Tento návod mám odzkoušený a dávám ho sem jen proto že je dost překvapující že se na tento problém nedá přijít snadno z nějakého chybového hlášení , PHP o tomto problému nebude hlásit nic a pokud systém UBUNTU nějak zachytí do logu tento problém tak jako začátečník  který užívá linux 1 měsíc,  nejsem schopen tento log odněkud vytáhnout, ale naštěstí se mi to podařilo díky GEANY, takže jsem se rozhodl to sem popsat více polopaticky. O nutnosti doinstalovat sendmail jsem nikde v souvislosti s instalací LAMP serveru nečetl, takže jako klasický WINDOWSÁK jsem předpokládal že je na LINUXU toto vyřešené stejným způsobem jako ve WOKNECH. Naštěstí to není nijak zvlášt obtížné, takže stačil den hledání a pokusů a je vše v pořádku. Podotýkám že zde záměrně neřeším možnost POSTFIXU.







 

mlaticka

  • Návštěvník
  • Příspěvků: 8
Re:ubuntu 14 lamp php email
« Odpověď #3 kdy: 15 Listopadu 2015, 13:38:23 »
Použijte raději phpmailer a nastavte mu externí smtpéčko. Předpokládám, že jde o Váš lokální PC pro vývoj. Ostatně to samé případně můžete udělat na serverové mašině. Bude to lepší, protože email problematika je poměrně složitá a než se to naučíte ušetříte si spoustu potíží.
Díky za odpověď .PHPmailer byla moje první varianta jak to hned, pohodlně a objektově vyřešit , ale šlo mi o základní nastavení serveru který automaticky hledá sendmail v /etc/usr/sbin/sendmail a předpokládá že je sendmail nainstalovaný. Nešlo mi o to jak to obejít, ale jak to vyřešit.

mlaticka

  • Návštěvník
  • Příspěvků: 8
Re:ubuntu 14 lamp php email
« Odpověď #4 kdy: 15 Listopadu 2015, 13:46:03 »
Oprava: v pátém bodu mám překlep , místo tohoto-  sendmail_path =  /usr/sbin/sendmail -t -i -fmujmail@seznam.cz
má být správně toto - sendmail_path =  /usr/sbin/sendmail -t -i -f mujmail@seznam.cz
jde o mezeru před emailem.

Martin - ViPEr*CZ*

Re:ubuntu 14 lamp php email
« Odpověď #5 kdy: 18 Listopadu 2015, 10:48:41 »
Použijte raději phpmailer a nastavte mu externí smtpéčko. Předpokládám, že jde o Váš lokální PC pro vývoj. Ostatně to samé případně můžete udělat na serverové mašině. Bude to lepší, protože email problematika je poměrně složitá a než se to naučíte ušetříte si spoustu potíží.
Díky za odpověď .PHPmailer byla moje první varianta jak to hned, pohodlně a objektově vyřešit , ale šlo mi o základní nastavení serveru který automaticky hledá sendmail v /etc/usr/sbin/sendmail a předpokládá že je sendmail nainstalovaný. Nešlo mi o to jak to obejít, ale jak to vyřešit.
No ono jste to v podstatě nevyřešil, ale zkomplikoval. :-) Teď Váš PC musí vyrobit email defakto 2x namísto, aby PHP simulovalo onen sendmail a poštu předalo napřímo :-) Vaše řešení je zbytečně náročnější na prostředky daného PC. A ve finále jste se jen naučil nastavit správnou reálnou cestu k programu sendmail.
Open source is gold way... Mint 17.2, Debian 8.1 Jessie| Ubuntu Wiki (návody) | Google vyhledávač | Qt4 návody

 

Provoz zaštiťuje spolek OpenAlt.