ugrás a tartalomhoz

E-mail tárgy karakterkódolása

simisoma · 2010. Dec. 18. (Szo), 10.48
Sziasztok,

mail függvény segítségével küldök ki levelet, de a tárgy Gmailban, Outlook Expressben jól jelenik meg de Freemailnél a Regisztráció a tárgyban így alakul: RegisztrĂĄciĂł aktivĂĄlĂĄsa.

Mi lehet a gond?

Köszi: SimiSoma
 
1

Content-Type

janoszen · 2010. Dec. 18. (Szo), 10.56
Mivel a subject fejléc - mint ahogy a neve is mondja - fejléc, a Content-Type beállítás őrá nem vonatkozik. Ha szeretnéd, hogy az ékezeteid jól jelenjenek meg, akkor azt kódolnod kell pl quoted printable formában. Ez így néz ki:

=?ISO-8859-1?Q?Szab=F3_J=F3zsi?=

Ha nem akarsz ilyesmivel szívni, akkor használj olyan jól megírt eszközöket, mint pl. a SwiftMailer
2

Ha szeretnéd, hogy az

kuka · 2010. Dec. 18. (Szo), 15.37
Ha szeretnéd, hogy az ékezeteid jól jelenjenek meg, akkor azt kódolnod kell pl quoted printable formában.
Hogy egészen pontosan fogalmazzunk, az encoded-word nem quoted-printable, hanem Q-encoding kódolást használ. De a különbség viszonylag kicsi.
3

Köszönöm

simisoma · 2010. Dec. 19. (V), 17.08
Köszönöm, így már tökéletes. ;)
4

És php-ból ezt hogy lehetne kezelni?

fledgling42 · 2010. Dec. 30. (Cs), 21.31
Sziasztok,

és php-ból ezt akkor hogyan tudnám lekezelni? Van egy HTML form, amiből egy input type="text" adná az elküldendő e-mail tárgyát. Én szerveroldalon hogy tudom biztosítani, hogy a megfelelő kódolással menjen a levél tárgya is?

Van valamilyen függvény, ami felismeri a karakterkódolást, és átalakítja megfelelő formába? Az iconv itt használható?

Minden segítséget előre is köszönök!

Update1:
Hopp, mostmár látom is... http://php.net/manual/en/function.mb-encode-mimeheader.php

My bad.

Update2: Hát mégsem... Ezzel a függvénnyel nem működik mindenhol. Egyedül az Opera levelezőjének tetszik így. Ötletek?
5

Lib

janoszen · 2010. Dec. 30. (Cs), 21.53
Használj kész libet, mint pl a SwiftMailer és akkor nem lesznek ilyen szívásaid. :)
6

Persze, persze; de az egész

fledgling42 · 2010. Dec. 30. (Cs), 22.50
Persze, persze; de az egész egy 26 soros kódhoz kell, szóval egyáltalán nem akarom bonyolítani. Valami egyszerű megoldás nincs akkor?
7

Email

Poetro · 2010. Dec. 31. (P), 00.47
Sajnos az esetek nagy részében egy email elküldése nem egyszerű feladat, kivéve ha csak ASCII szövegről van szó, amit tényleg egyszerű elküldeni, de általában nem erről van szó. Ha ékezetes például magyar karakterek kellenek, akkor mindenképpen érdemes egy hasonló levélküldő osztályt nézni, mint a Swift Mailer, vagy PEAR Mail, PHP Mailer.
8

ez mukodik nekem szepen: php

Tyrael · 2011. Jan. 1. (Szo), 00.58
ez mukodik nekem szepen:
php -r 'mail("tyra3l##kukac##gmail.com", "=?UTF-8?B?".base64_encode("íűáéúőóüö")."?=", "íűáéúőóüö", "MIME-Version: 1.0\r\nContent-type: text/plain; charset=UTF-8\r\n");'

bar hosszabb tavon tenyleg erdemes valami robosztusabb libet hasznalni.

Tyrael
9

Namármost, mivel több mint

fledgling42 · 2011. Jan. 23. (V), 00.14
Namármost, mivel több mint ezer e-mailt kell kiküldeni, ezért józan ésszel belátható, hogy tényleg valamilyen robosztusabb rendszert kell használnom, nemcsak a karakterkódolás miatt. A választásom a Swiftmailerre esett.

Értelemszerűen fontos az, hogy az összes e-mailt sikeresen elküldjem, és azok sikeresen megérkezzenek, vagy ha mégsem, akkor arról pontos és megbízható adatom legyen. A kérdésem az, hogy elég megadni egy ilyet (http://swiftmailer.org/docs/return-path), és ezt (http://swiftmailer.org/docs/failures-byreference) használni a hibák kiíratására egy log fájlba ahhoz, hogy az összes lehetséges hibát feltérképezzem? Az Antiflood-plugin (http://swiftmailer.org/docs/antiflood-plugin) is olyasminek tűnik, mint amit mindenképpen használnom kéne... Kinek milyen tapasztalatai vannak, szerintetek miket kell mindenképpen beállítani, lekezelni?

Előre is köszönöm!
10

Validation

janoszen · 2011. Jan. 23. (V), 01.23
Ha tényleg ilyen tömegű levelek kiküldésére van szükség, akkor érdemes egy kis energiát fordítani a mailszerver finomhangolására. A failures-byreference mindenképpen ajánlott és természetesen a return path is legyen egy élő, érvényes e-mail cím. A küldési szempontokról itt írtam részletesebben: http://blog.janoszen.hu/2010/02/03/hatekony-automatizalt-levelkuldes/

Ami az antifloodot illeti, én úgy írtam meg a saját küldőmet, hogy 10 másodpercenként küldjön ki egy levelet. Így minden probléma nélkül kiment több ezer levél és nem volt fennakadás sehol.
11

Köszönöm. A return path

fledgling42 · 2011. Jan. 23. (V), 15.19
Köszönöm. A return path valamiért azonban nem működik, direkt adtam meg nemlétező e-mail címet is, és se GMailes, se egy egyetemi fiókkal próbálkozva nem érkezik mailer deamon levél arról, hogy nem létezik a cím. Természetesen a batchsend sem jelez hibát. Ilyenkor mi van? A Wikipedia szerint "Today, however, most email is spam, which usually utilizes forged Return-Paths. It is then often impossible for the MTA to inform the originator, and sending a bounce to the forged Return-Path would hit an innocent third party. In addition, there are specific reasons why it is preferable to silently drop a message rather than reject it." van, amikor szándékosan nem küldenek bounce-üzenetet. Ez ezek szerint nem csak a gmail-nél működik, hanem mindenhol? Ez az IP hírnévvel függne ossze? Ilyenkor mit tudok csinálni?
12

Levelező szerver

janoszen · 2011. Jan. 23. (V), 15.46
Elvben a Te levelező szerverednek kell bounce-ot küldenie, nem a másiknak. Ha a másik küld, azt úgy hívják, hogy backscatter. Kérd meg a rendszergazdádat, hogy nézzen logokat.
13

Iagzából pont dotrollos

fledgling42 · 2011. Jan. 23. (V), 16.34
Iagzából pont dotrollos szerveren tesztelgetek, és a support azt mondta: "Nem [a mi oldalunkon van a probléma], ugyanis a szerevreink úgy vannak beállítva, hogy ha nem sikerül kézbesíteni a levelet, akkor arról természetesen küld visszajelzést."

A kód jelenleg így néz ki:
<?php
set_time_limit(0);
require_once 'lib/swift_required.php';

//címzettek hozzáadása egy tömbhöz fájlból
$toaddreses=array();
if ( $fp = fopen("contacts.txt","r") ) // fájl megnyitása olvasásra
	{$temp = "";
	
		while (! feof ($fp))  // fájlból beolvasás, a $ karakterig, ekkor berakjuk a tömbbe ez ismételve egészen a fájl végéig
		{
			$karakter = fgetc($fp);
			if ($karakter != "$") {
				$temp = $temp . $karakter;}
			else {$toaddreses[] = $temp;
				  $temp = "";
				  }
		}
	}
else echo "Fájl hiba";
fclose($fp);

//Create the Transport
$transport = Swift_SmtpTransport::newInstance('localhost', 25);

//Create the Mailer using your created Transport
$mailer = Swift_Mailer::newInstance($transport);

//Create a message
$message = Swift_Message::newInstance($_GET[subject])
  ->setFrom(array($_GET[sender] => $_GET[sendername]))
  ->setTo($toaddreses)
  ->setReturnPath($_GET[returnpath])
  ->setContentType("text/html")
  ->setBody($_GET[message])
  ;


//Create the attachment
// * Note that you can technically leave the content-type parameter out
$attachment = Swift_Attachment::fromPath($_GET[attachment]);

//Attach it to the message
$message->attach($attachment);
 
//Send the message
$numSent = $mailer->batchSend($message, $failures);

printf("%d e-mail elküldve. \n", $numSent);

echo "<br /> <br />";

echo "Hibás:";
print_r($failures);

?>
14

Akkor ok

janoszen · 2011. Jan. 23. (V), 19.21
Akkor ok, időközben megtaláltak, mert én vagyok az ügyeletes. :)

Visszaolvastam a beszélgetést és azt sajnos úgy tűnik, egy kis félreértés volt, mert a webtárhelyről nem megy ki a bounce, ugyanis nem tudja ellenőrizni, hogy az a postafiók hol van. Dolgozunk egy megoldáson, de némileg tud rajta gyorsítani, ha írsz egy mailt a domreg##kukac##dotroll.com címre, hogy szeretnéd a webtárhelyről megkapni a bounceokat.

Egyébként a tárhelyen még azt érdemes figyelembe venni, hogy csak olyan mailcímről enged kiküldeni (from mező), ami vagy egy nagy mail szolgáltatóhoz tartozik (pl Gmail) vagy a tárhelyre föl van véve.

Még infó: mivel mondtad, hogy több ezer levelet szeretnél kiküldeni, arra figyelj, hogy a DotRollos tárhelyről napi 1000 db levelet lehet kiküldeni másodpercenkénti maximum 1 levél időzítéssel. Ennek megfelelően tervezd meg a küldő alkalmazásodat.
15

Haha, a szálak mindenhonnan

fledgling42 · 2011. Jan. 23. (V), 20.08
Haha, a szálak mindenhonnan hozzád vezetnek :) Igazából nem is erről a szerverről akarom majd kiküldeni az e-maileket (kb. 1100 db), hanem egy másikról, csak ott meg végképp nem tudom, hogy milyen korlátozások vannak. Hétfőn kéne kimennie, és szerintem nem csak gmail-es címek vannak, hanem freemail-es, unideb.hu-s stb-stb (a kis.tamas##kukac##arts.unideb.hu-ra kiment a mail, pedig az nem tűnt olyan nagy szolgáltatónak). Hétfőig megoldható a bounce? A másodpercenként 1-et az antiflooddal valahogy így állítsam be?
$mailer->registerPlugin(new Swift_Plugins_AntiFloodPlugin(100));
És ha a kódra rápillantasz, akkor az összes hibásan kiküldött levélről tudni fogok (ha a bounce is működik)? Vagy ilyenkor másra is figyelni kell? UI. Hmm, mostmár valamiért egyáltalán nem működik az egész. Valahonnan letöröltem volna véletlenül egy pontosvesszőt, vagy mi a csuda?
16

Írj mailt

janoszen · 2011. Jan. 24. (H), 14.01
Figyu, csináljuk úgy, hogy írsz egy mailt nekem a pasztor.janos##kukac##dotroll.com -ra, aztán lezongorázzuk az egészet holnap, ha kell, ideiglenesen bekapcsolom Neked az SSH-t, hogy ne kelljen a webes időzítéssel szívnod és akkor inkább állíts be 10 másodperces időzítést sleep()-el, akkor is kimegy 3 óra alatt.

Update: közben nagy úgy tűnik, kiélesítjük a rate limiterünket, úgyhogy lehet, mire válaszolsz a levélre, már nem is lesz szükség a varázslásra, megoldja a mailrendszerünk.