#1 Re: Ostatní problémy » Nemožnost odeslání mailu s přílohou na doménách na Endoře » 2015-08-28 05:24:54

Zkoušel jsem odstranit vícenásobné odřádkování a i poté s proměnnou PHP_EOL, avšak bez výsledku...
Poté jsem na internetu našel jiný skript, který zde na Endoře mail s přílohou odešle, ale zase do něho nemohu nacpat text, viz kód:

$path_to_file = $_SERVER['DOCUMENT_ROOT']."/prilohy/";
$name = "01.jpg";

$attachment_name = $path_to_file.$name; 
$fp = FOpen ($attachment_name, 'r'); 
$contents = FRead ($fp, FileSize($attachment_name)); 
$contents = Chunk_Split(Base64_Encode($contents)); 
FClose ($fp); 

$address = 'blahapet@seznam.cz'; 
$subject = 'Email s přílohou'; 

$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-2\"\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ě!'; 
} 

Chápu-li to dobře, tak na řádku: $message .= "SEM MUZETE ZADAT TEXT EMAILU\n"; má být text, ale ten se pak nezobrazí, nevíte někdo, co s tím?

#2 Re: Ostatní problémy » Nemožnost odeslání mailu s přílohou na doménách na Endoře » 2015-08-26 15:25:21

Je to www.webhk.cz, ale nejde to na všech doménách na Endoře. Z Podpory mi napsali mail:

Dobrý den,
skript jsem vyzkoušel pustit s plnými právy přímo z příkazové řádky a vypsalo mi to následující:
Multiple or malformed newlines found in additional_header
při volání funkce mail() ve Vašem skriptu. mail() vrátil FALSE.

Po další odpovědi mi řekl že s tím nic neudělá, není programátor.

#3 Ostatní problémy » Nemožnost odeslání mailu s přílohou na doménách na Endoře » 2015-08-25 16:37:23

blahapet74
Odpovědi: 5

Ahoj, níže mám skript, který odešle mail s přílohou na předem zadaný mail. Problém je v tom, že ten samý, duplicitní soubor v pohodě odešle mail na Českém hostingu i třeba na Forpsi, ale tady na Endoře nikoliv a nezobrazí se ani žádná chybová hláška:

function encodeMailHeader ($string, $charset = 'iso-8859-2')
		{
   		return sprintf ('=?%s?B?%s?=', strtoupper ($charset),base64_encode ($string));
		}

function mail_attachment($filename, $path, $mailto, $from_mail, $from_name, $replyto, $subject, $message) {
        $file = $path.$filename;
        $file_size = filesize($file);
        $handle = fopen($file, "r");
        $content = fread($handle, $file_size);
        fclose($handle);
        $content = chunk_split(base64_encode($content));
        $uid = md5(uniqid(time()));
        $name = basename($file);
        $header = "From: ".$from_name." <".$from_mail.">\n";
        $header .= "Reply-To: ".$replyto."\n";
        $header .= "MIME-Version: 1.0\n";
        $header .= "Content-Type: multipart/mixed; boundary=\"".$uid."\"\n\n";
        $header .= "This is a multi-part message in MIME format.\n";
        $header .= "--".$uid."\n";
        $header .= "Content-type:text/html; charset=iso-8859-2\n";
        $header .= "Content-Transfer-Encoding: 7bit\n\n";
        $header .= $message."\n\n";
        $header .= "--".$uid."\n";
        $header .= "Content-Type: application/octet-stream; name=\"".$filename."\"\n"; // use different content types here
        $header .= "Content-Transfer-Encoding: base64\n";
        $header .= "Content-Disposition: attachment; filename=\"".$filename."\"\n\n";
        $header .= $content."\n\n";
        $header .= "--".$uid."--";
        mail($mailto, $subject, "", $header);
      }

      $email = "blahapet@seznam.cz";


      $domain = "SONN s.r.o. - ".$_SERVER['SERVER_NAME']."";
      $subject = "SONN - Vaše objednávka";
      $email_from = "noreply@sonn.cz";
      $zprava .= "<p>Test, test, test...</p>";

      $path_to_file = $_SERVER['DOCUMENT_ROOT']."/prilohy/";
      $name = "01.jpg";

      mail_attachment($name, $path_to_file, $email, $email_from, encodeMailHeader($domain), $email_from, encodeMailHeader($subject), $zprava);

Funkce mail_attachment není z mojí hlavy a tak mě napadá, jestli tam je něco, co např. Endora nepodporuje apod.

#4 Re: Ostatní problémy » Funkce mail() nedoručí zprávu do schránky hostující na Českém hostingu » 2015-08-17 16:32:50

Tak asi budu muset, níže je vyjádření z podpory Endory...

Dobrý den,
Důvodem nedoručení je to, že server vyskytl na blacklistu po spamovém útoku z našeho serveru a český hosting filtruje e-maily podle blacklistu. Problémový uživatel byl zablokován a zažádal jsem o delist. Nejdéle do 24 hodin by jsme měli obdržet vyjádření blacklistu ohldně delistace. Omlouváme se za komplikace.

Případně doporučuji odesílat poštu pomocí nějakého SMTP serveru (pozor na omezení počtu odeslaných e-mailů u daných SMTP serverů)

#6 Re: Ostatní problémy » Funkce mail() nedoručí zprávu do schránky hostující na Českém hostingu » 2015-08-17 15:11:59

To jsem si myslel taky... Jenže pak jsem ten samej soubor překopíroval na Český hosting, tam ho spustil a mail na danou adresu na Českým hostingu normálně dorazil. Vše jsem zkoušel samozřejmě opakovaně a v jednom případě vždy nedošel, tzn. skript na Endoře --> mail na ČH a pak zase došel - skript na ČH --> mail na ČH.

#7 Ostatní problémy » Funkce mail() nedoručí zprávu do schránky hostující na Českém hostingu » 2015-08-17 11:44:50

blahapet74
Odpovědi: 6

Dobrý den,
níže mám skript, který odsud z Endory nedoručí zprávu do schránky, která je hostovaná u Českého hostingu (všude jinam ano). Chci se zeptat, lze-li skript nějak upravit, aby byl korektní (hlavičku emailu) bez nutnosti použití SMPT serveru?

Předem moc děkuji!

<?php
function encodeMailHeader ($string, $charset = 'iso-8859-2')
		{
   		return sprintf ('=?%s?B?%s?=', strtoupper ($charset),base64_encode ($string));
		}


if($_POST["odeslat_mail"] == "ok"):


$jmeno = $_POST["jmeno"];
$email = $_POST["email"];
$predmet = $_POST["predmet"];
$zprava = $_POST["zprava"];



    $domain = "Nový mail";

    $headers .= "From: ".encodeMailHeader($domain)."<blahapet@seznam.cz>\n";
    $headers .= "Content-Type: text/html; charset=iso-8859-2;\n";

    $cont .= '<h2>Nový mail</h2>';
    $cont .= '<p class="text">';
    $cont .= '<strong>Jméno a příjmení:</strong> '.$jmeno.'<br />';
    $cont .= '<strong>E-mail:</strong> <a href="mailto:"'.$email.'>'.$email.'</a><br />';
    $cont .= '<strong>Předmět:</strong> '.$predmet.'<br />';
    $cont .= '<strong>Text mailu:</strong> '.$zprava;
    $cont .= '</p>';


mail($email, encodeMailHeader($predmet), $cont, $headers);


endif;

?>

Zápatí

Založeno na FluxBB | CZ a SK