Autor Zpráva
SwimX
Profil
Dobrý den,

takto vypadá kód na odesílání emailu. Stále mi však padá do spamu, co mám špatně?

$odkaz = WWW.'registrace/aktivace/'.md5($id).md5($_POST['email'])."/"; // WWW je konstanta define('WWW', 'http://www.sps.pi.com');
$zprava = "
<h2>Registrace</h2>
<br><p>Vážený zákazníku,<br> 
Děkujeme Vám, za regisraci do našeho obchodu.<br>
Pro aktivaci vašeho účtu pokračujte prosím na dokaz $odkaz<br><br><br>Pokud jste se u nás neregistroval, pak pouzeně kdo zneužil Váš email, neklikejte tedy na aktivační odkaz ale kontaktujte nás. Děkujeme</p> ";
$mail = @cs_mail($_POST['email'], "Registrace", EMAIL_HEAD.$zprava.EMAIL_FOOT, "html");

define("INFO_EMAIL_NAME", "Virtuální obchod");
define("INFO_EMAIL", "info@obchod.sps-pi.cz");
define("EMAIL_HEAD", "<h1 style=\"font-size: 16pt; color: #0066ff;\">\nSPŠ a VOŠ Písek<br />Virtuální obchod s elektronickými součástkami\n</h1><p><br /></p>");
define("EMAIL_FOOT", "<p><br /><br /><br /><br /></p><p>S pozdravem a přáním pěkného dne\n<br /><br /><a href=\"#\">Virtuální obchod s elektronickými součástakmi</a><br />\n<a href=\"http://www.sps-pi.cz\">SPŠ a VOŠ Písek</a></p>"); 


function autoUTF($s)
{
    // detect UTF-8
    if (preg_match('#[\x80-\x{1FF}\x{2000}-\x{3FFF}]#u', $s))
        return $s;
    // detect WINDOWS-1250
    if (preg_match('#[\x7F-\x9F\xBC]#', $s))
        return iconv('WINDOWS-1250', 'UTF-8', $s);
    // assume ISO-8859-2
    return iconv('ISO-8859-2', 'UTF-8', $s);
}

function cs_mail ($to, $predmet, $zprava,  $text="plain", $head = "")
       {  $predmet = "=?utf-8?B?".base64_encode(autoUTF ($predmet))."?=";
          $head .= "Reply-To: ".INFO_EMAIL_NAME." <".INFO_EMAIL.">\r\n"; 
				  $head .= "Return-Path: ".INFO_EMAIL_NAME." <".INFO_EMAIL.">\r\n"; 
				  $head .= "From: ".INFO_EMAIL_NAME." <".INFO_EMAIL.">\r\n"; 
				  $head .= "Organization: ".INFO_EMAIL_NAME."\r\n";
					$head .= "MIME-Version: 1.0\n";
          $head .= "Content-Type: text/$text; charset=\"utf-8\"\n";
          $head .= "Content-Transfer-Encoding: base64\n";
          $zprava = base64_encode (autoUTF ($zprava));
          return mail ($to, $predmet, $zprava, $head); }
      
nightfish
Profil
vidím typ text/html, ale nevidím tam žádné <html>, <body> atd.
SwimX
Profil
nightfish:
bývalo to v EMAIL_HEAD ale pak jsem udělal v administraci možnost editace, a na todle uplně zapomněl. Zkusím to tam eště dodat, pokud to bude tím, tak jsem blb :) Dík
SwimX
Profil
OK bylo to tím, přidal jsem tam <html><head><title>Virtual....</title></head><body>
a do FOOT </body></html>

Mám ale ještě jeden problém, proč to padá do spamu. Když v halvičkách
FROM: Virtuální obchod <info@sps-pi.com>

tak mi přijde FROM do emailu takto:
Virtuální obchod <info@pra.sps-pi.com> [=?ISO-8859-1?Q?Virtu=E1ln=ED_obchod_<info@pra.sps-pi.com>?=]

Může za to diakritika, bez ní to je v pořádku, ale co s tím? nějakým způsobem to prohnat přes autoUTF?

upravil jsem fci cs_mail na toto:
function cs_mail ($to, $predmet, $zprava,  $text="plain", $head = "")
       {  $predmet = "=?utf-8?B?".base64_encode(autoUTF($predmet))."?=";
          
					$head .= "Reply-To: =?utf-8?B?". base64_encode(autoUTF(INFO_EMAIL_NAME))."?= <".INFO_EMAIL.">\r\n"; 
				  $head .= "Return-Path: =?utf-8?B?".base64_encode (autoUTF(INFO_EMAIL_NAME))."?= <".INFO_EMAIL.">\r\n"; 
				  $head .= "From: =?utf-8?B?".base64_encode (autoUTF(INFO_EMAIL_NAME))."?= <".INFO_EMAIL.">\r\n"; 
				  $head .= "Organization: =?utf-8?B?".base64_encode (autoUTF(INFO_EMAIL_NAME))."?=\r\n";
					$head .= "MIME-Version: 1.0\n";
          $head .= "Content-Type: text/$text; charset=\"utf-8\"\n";
          $head .= "Content-Transfer-Encoding: base64\n";
          
					if($text=='html') $zprava = EMAIL_HTML_HEAD.$zprava.EMAIL_HTML_FOOT;
					$zprava = base64_encode (autoUTF ($zprava));
          return mail ($to, $predmet, $zprava, $head); }



což sice funguje, email přijde do doručené pošty > zobrazí se správně, vše ok, ale když na něj kliknu jako číst (Outlook) tak mi ho to zahodí do nevyžádané pošty. Ale to už není tak zlé, alespoň se zobrazí v doručené. Přesto, kdyby někdo věděl řešení....
SwimX
Profil
Nikdo by mě nenasměroval, alespoň kde hledat? Upravit či přidat nějaké hlavičky? :(
AM_
Profil
byla na to nějaká funkce, na kterou si teď bohužel nevzpomenu, něco jako encode_mimeheader.
Jinak samozřejmě doporučil bych PHPMailer a tohleto nebudeš vůbec muset řešit.
SwimX
Profil
AM:
ale budu includovat tunu kravin navíc, chtěl jsem se mu vyhnout.
myslels tudle? :) http://php.net/manual/en/function.mb-encode-mimeheader.php ale to jsem více m=ně vyřešil tím mým:
$head .= "From: =?utf-8?B?".base64_encode (autoUTF(INFO_EMAIL_NAME))."?= <".INFO_EMAIL.">\r\n"; 
SwimX
Profil
nechal jsem si do souboru vypsat zprávu po té, co projede přes
$zprava = base64_encode (autoUTF ($zprava));

a vypadá takto: to je správně? :) Na email sice dorazí HTML tagy, a email se správně zobrazí, ale je ve spamu, nemlže to být tímto?
PGh0bWw+PGhlYWQ+PHRpdGxlPlZpcnR1w6FsbsOtIG9iY2hvZCBzIGVsZWt0cm9uaWNrw71taSBzb3XEjcOhc3RrYW1pIFNQxaAgYSBWT8WgIFDDrXNlazwvdGl0bGU+PC9oZWFkPjxib2R5PjxoMSBzdHlsZT0iZm9udC1zaXplOiAxNnB0OyBjb2xvcjogIzAwNjZmZjsiPgpTUMWgIGEgVk/FoCBQw61zZWs8YnIgLz5WaXJ0dcOhbG7DrSBvYmNob2QgcyBlbGVrdHJvbmlja8O9bWkgc291xI3DoXN0a2FtaQo8L2gxPjxwPjxiciAvPjwvcD4NCgkJCQkJCQkJPGgyPlptxJtuYSBoZXNsYTwvaDI+DQoJCQkJCQkJCTxicj48cD5Ww6HFvmVuw70gesOha2F6bsOta3UsPGJyPiANCgkJCQkJCQkJTsSba2RvICh6xZllam3EmyB2eSkgcG/FvsOhZGFsIG8gem3Em251IGhlc2xhIHYgbmHFoWVtIG9iY2hvZHUuPGJyPg0KCQkJCQkJCQlQb2t1ZCBzaSBwxZllamV0ZSB2eWdlbmVyb3ZhdCBub3bDqSBoZXNsbyBwb2tyYcSNdWp0ZSBwcm9zw61tIG5hIGRva2F6IGh0dHA6Ly93d3cucHJhLnNwcy1waS5jb20vc2hvcC96YXBvbWVudXRlLWhlc2xvL3ptZW5hL2UxOThjYTZiNjE0NzQ4OGE5NzZlNmNiMGIwOTIyMzgwOGUyZDdkZmYzYjBkZGRiNDllMGM3M2ExOTBhZWY3OTgvDQoJCQkJCQkJCSA8YnI+PGJyPjxicj4NCgkJCQkJCQkJIFBva3VkIGpzdGUgbyB6bcSbbnUgaGVzbGEgbmVwb8W+w6FkYWwsIHBhayBwb3V6ZSBuxJtrZG8gem5ldcW+aWwgVsOhxaEgZW1haWwsIG5la2xpa2VqdGUgdGVkeSBuYSBha3RpdmHEjW7DrSBvZGtheiBhbGUga29udGFrdHVqdGUgbsOhcy4gRMSba3VqZW1lPC9wPiANCgkJCQkJCQk8cD48YnIgLz48YnIgLz48YnIgLz48YnIgLz48L3A+PHA+UyBwb3pkcmF2ZW0gYSBwxZnDoW7DrW0gcMSba27DqWhvIGRuZQo8YnIgLz48YnIgLz48YSBocmVmPSIjIj5WaXJ0dcOhbG7DrSBvYmNob2QgcyBlbGVrdHJvbmlja8O9bWkgc291xI3DoXN0YWttaTwvYT48YnIgLz4KPGEgaHJlZj0iaHR0cDovL3d3dy5zcHMtcGkuY3oiPlNQxaAgYSBWT8WgIFDDrXNlazwvYT48L3A+PC9ib2R5PjwvaHRtbD4=
SwimX
Profil
Stejně tak když si v Outlooku zobrazím hlavičky emailu:
Reply-To: =?utf-8?B?VmlydHXDoWxuw60gb2JjaG9k?= <info@pra.sps-pi.com>
From: =?utf-8?B?VmlydHXDoWxuw60gb2JjaG9k?= <info@pra.sps-pi.com>
Organization: =?utf-8?B?aW5mb0BwcmEuc3BzLXBpLmNvbQ==?=
??
Alphard
Profil
Ano, to je správný výstup base64_encode. Dekódovat to umí base64_decode().
Pro předmět a hlavičky je to klasika. Samotné tělo mailu by se kódovat nemuselo, ale nezapomeňte kdyžtak smazat hlavičku Content-Transfer-Encoding: base64.
Jestli to má vliv na spam vážně nevím. Mně to do spamu Gmail ani Thunderbird nehází.
SwimX
Profil
Alphard:
Mně to do spamu Gmail ani Thunderbird nehází.
Zkoušel jsi se registrovat u mě a nespadlo? To je divné,posílám si to taky na gmail.
Alphard
Profil
SwimX:
Zkoušel jsi se registrovat u mě a nespadlo?
Teď jsme se nepochopili, myslel jsem své maily z vlastního severu posílané funkcí cs_mail().
SwimX
Profil
Alphard:
mě také nikdy nepadaly, když to bylo text/plain. Asi to bude v tom HTML zkusím si ještě hrát :(
Alphard
Profil
SwimX:
Scripty uvedené ve FAQ se snažím mít bezchybné. Podívám se na to, ale dřív než o víkendu to bohužel nestihnu, nevím co dřív :-(.

Třeba bych si zkusil poslat mail od vás, ale na http://sps-pi.com/ jsem žádnou registraci nenašel
SwimX
Profil
Alphard:
je to http://pra.sps-pi.com/shop/ nevím proč, to zařizovala škola. Registrace konkrétně: http://pra.sps-pi.com/shop/registrace/
Na seznamu do spamu nespadlo, na gmailu mi to padlo do obou. Předpokládám, že chyba bude u mě, takže se ji do víkendu pokusím najít.
Alphard
Profil
Hmm, tak gmail to hodil do spamu.
Faktem je, že většinu mailů si posílám jako text. Pro html maily jsem v poslední době používal Nette\Mail | Nette Framework, protože umožňuje používat šablony.

Jak jsem psal, na funkci cs_mail() se podívám o víkendu. Jestli najdu chybu nebo řešení, tak ho tam dopíši a ozvu se i tady.
SwimX
Profil
Alphard:
Mnohokrát děkuji.
Ale teď jsem zkusil odeslat soubor z pra.sps-pi.com/pokus.php
kde jsem použil přesně funkci z FAQu (i text/plain) a stejně spadl do SPAMu.
tentýž skript jsem hodil na webzdarma > do spamu nespadl.

Testuji dál, jednoduché HTML s jednou H1 a odkazem. Z pra.sps-pi.com > spam, z webzdarma doručená pošta.

Nicméně moje registrace padá do spamu i z webu zdarma, ale chyba je tedy určitě v HTML, budu eště chvilku zkoušet. Každopádně na podporu pra.sps-pi.com napíšu, ať se na to kouknou i oni.
SwimX
Profil
Sem uplně zmaten a znechucen. Z pra.sps-pi jde všechno hned do spamu.
Z webu zdarma se mi povedlo odeslat email, který byl stejný jako je registrační (kromě odkazu pro přihlášení) asi 5x přišel do doručené pošty. Pak jsem k němu vložil i http://www...prihlaseni a od te doby padl do spamů. Když jsem odkaz opět odendal chodil stále do spamů.

Pokud na něco přijdeš, tak ti budu nesmírně vděčný, v opačném případě prostě ve škole konstatuju, že za to může hosting, a tam kde vypisuji, Email byl odeslán, už je hláška: Zkontrolujte si i spam a je to. :D
nightfish
Profil
SwimX:
kde jsem použil přesně funkci z FAQu (i text/plain) a stejně spadl do SPAMu.
tentýž skript jsem hodil na webzdarma > do spamu nespadl.
> posílám si to taky na gmail

nepoužívá gmail kontrolu SPF? je u domény odesílatele SPF nějak nastaveno?
Alphard
Profil
SwimX:
Pak jsem k němu vložil i http://www...prihlaseni a od te doby padl do spamů.
A když si pošlete normální mail (myslím třeba z jiného mailového účtu) obsahující několik podobných odkazů (pra.sps-pi.com), tak taky spadne do spamu?
SwimX
Profil
Alphard:
tak taky spadne do spamu?
ano, spadnul. i když odkaz vedl na http://www.plavec.borec.cz/upfiles/maturita/ i na http://pra.sps-pi.com/shop/registrace/

nightfish:
SPF
nevím co je :) pomůže ti toto?:
email odeslaný z pra.sps-pi.com

Delivered-To: vesele.spamuj@gmail.com
Received: by 10.216.168.15 with SMTP id j15cs62892wel; Thu, 14 Jan 2010
 12:57:00 -0800 (PST)
Received: by 10.87.40.40 with SMTP id s40mr1735789fgj.73.1263502619349; Thu,
 14 Jan 2010 12:56:59 -0800 (PST)
Return-Path: <www-data@athena.zelenyweb.cz>
Received: from athena.zelenyweb.cz (mail.zelenyweb.cz [88.86.107.58]) by
 mx.google.com with ESMTP id l19si7909285fgb.28.2010.01.14.12.56.59; Thu, 14
 Jan 2010 12:56:59 -0800 (PST)
Received-SPF: pass (google.com: domain of www-data@athena.zelenyweb.cz
 designates 88.86.107.58 as permitted sender) client-ip=88.86.107.58;
Authentication-Results: mx.google.com; spf=pass (google.com: domain of
 www-data@athena.zelenyweb.cz designates 88.86.107.58 as permitted sender)
 smtp.mail=www-data@athena.zelenyweb.cz
Received: by athena.zelenyweb.cz (Postfix, from userid 33) id A16C3B7D9D; Thu,
 14 Jan 2010 21:57:02 +0100 (CET)
To: vesele.spamuj@gmail.com
Subject: =?utf-8?B?WmFwb21lbnV0w6kgaGVzbG8=?=
Reply-To: =?utf-8?B?VmlydHXDoWxuw60gb2JjaG9k?= <info@pra.sps-pi.com>
From: =?utf-8?B?VmlydHXDoWxuw60gb2JjaG9k?= <info@pra.sps-pi.com>
Organization: =?utf-8?B?aW5mb0BwcmEuc3BzLXBpLmNvbQ==?=
MIME-Version: 1.0
Content-Type: text/html; charset="utf-8"
Content-Transfer-Encoding: base64
Message-Id: <20100114205702.A16C3B7D9D@athena.zelenyweb.cz>
Date: Thu, 14 Jan 2010 21:57:02 +0100 (CET)



email odeslaný z plavec.borec.cz/
Delivered-To: vesele.spamuj@gmail.com
Received: by 10.216.168.15 with SMTP id j15cs64601wel; Thu, 14 Jan 2010
 14:32:27 -0800 (PST)
Received: by 10.204.48.132 with SMTP id r4mr793658bkf.158.1263508345238; Thu,
 14 Jan 2010 14:32:25 -0800 (PST)
Return-Path: <info@plavec.borec.cz>
Received: from ns2.anoweb.cz (siva-2.webzdarma.superhosting.cz
 [88.86.113.132]) by mx.google.com with ESMTP id
 5si2250496bwz.3.2010.01.14.14.32.24; Thu, 14 Jan 2010 14:32:25 -0800 (PST)
Received-SPF: pass (google.com: domain of info@plavec.borec.cz designates
 88.86.113.132 as permitted sender) client-ip=88.86.113.132;
Authentication-Results: mx.google.com; spf=pass (google.com: domain of
 info@plavec.borec.cz designates 88.86.113.132 as permitted sender)
 smtp.mail=info@plavec.borec.cz
Received: from loki.s.webzdarma.cz (loki.s.webzdarma.cz [88.86.113.138]) by
 ns2.anoweb.cz (Postfix) with ESMTP id E18A09EA7C for
 <vesele.spamuj@gmail.com>; Thu, 14 Jan 2010 23:35:38 +0100 (CET)
Received: by loki.s.webzdarma.cz (Postfix, from userid 99) id 6ACC8F9990; Thu,
 14 Jan 2010 23:32:23 +0100 (CET)
To: vesele.spamuj@gmail.com
Subject: =?utf-8?B?VsOhbm/EjW7DrSBjZW5h?=
From: =?utf-8?B?T25kxZllaiDFoGVqdmw=?= <SvvimX@gmail.com>
MIME-Version: 1.0
Content-Type: text/html; charset="utf-8"
Content-Transfer-Encoding: base64
X-sender: info@plavec.borec.cz
X-Abuse: postmaster@webzdarma.cz
Message-Id: <20100114223223.6ACC8F9990@loki.s.webzdarma.cz>
Date: Thu, 14 Jan 2010 23:32:23 +0100 (CET)

nightfish
Profil
SwimX:
v obou případech je tam
Received-SPF: pass
takže ověřením SPF to projde, takže nemám tušení
SwimX
Profil
Cituji odpověď od hostingu:
"ony e-maily zjevně vyřeší až pak přesun dat na doménu ".cz", e-maily jsou odesílány ze skritpovaného localhostu, navíc z domény, která je vedena bez uvedeného SenderID (což bohužel v nejbližší době nevyřeším, v budoucnu se ji snad podaří převést na správné údaje) a bohužel je pro svoji přítomnost v com zóně již dosti profláklá na rozesílání falešených e-mailů. Pokud se jedná o e-mail z poštovního klienta se zapnutým SMTP ověřováním, pak problém nebývá."
Alphard
Profil
Mám zpoždění, ale také výsledky.
Z posledních příspěvků sice vyplývá, že je problém na konkrétním serveru, ale přesto jsem to testoval. Použil jsem váš script a odesílal jsem e-maily z hostingů, které mám momentálně k dispozici, na gmail i jiné. Nikde mi to do spamu nespadlo, takže ve funci cs_mail() by něměl být problém ani s HTML e-maily.

Jediné problémy, které jsem našel:
1. konstanty mají být na začátku, jinak se vypisují notice
2. některé služby (Seznam) špatné zobrazí název odesilatele, protože není správně ošetřená konstanta INFO_EMAIL_NAME
SwimX
Profil
Ahoj,

Mnohokrát děkuji že jsi si s tím dal tu práci.

Notice mě zrovna moc netrápí, stejně na ostrém servru je error_reporting 0 a notice asi bdue vyhazovat i několik dalších funkcí. :)

Co to znamená špatně ošetřená konstanta?
Alphard
Profil
SwimX:
Co to znamená špatně ošetřená konstanta?
Teď se koukám, že jsem si zkopíroval úvodní script, ve kterém není zakódovaná. Ve [#4] je to už opravené.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: