[EMAIL] multipart / alternative werkt niet lekker

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • xilent_xage
  • Registratie: Februari 2005
  • Laatst online: 23-09-2024
Hoi,

Ik heb mijn mailclass aangepast om automatisch multipart/alternative mails te verzenden. Hij parset de html naar een plaintext alternatief, en stuurt ze vervolgens beiden in de mail. Helaas wordt de mail in sommige clients als plain weergegeven (terwijl html wel wordt ondersteund), in andere clients missen er stukken in de html. Ik vermoed een headerprobleem.

Ik stuur de volgende headers mee:

PHP:
1
2
3
4
5
6
7
$headers = "From: " . $from . $eol;
$headers .= "Reply-To: " . $from . $eol;
$headers .= "Return-Path: " . $from . $eol;
$headers .= "Message-ID: <" . time() . " server@" . $_SERVER['SERVER_NAME'] . ">" . $eol;
$headers .= "X-Mailer: Mijn CMS" . $eol;
$headers .= "MIME-Version: 1.0" . $eol;
 $headers .= "Content-Type: multipart/alternative; boundary=\"alt-" . $mime_boundary . "\"" . $eol;


En vervolgens deze content:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
--alt-9a1a46a7beef2f8c35229c75e9a17861
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 7bit


Beste ,

Bedankt voor uw aanmelding op ****. Om uw inschrijving te bevestigen kunt u klikken op de volgende link:

Klik hier om uw abonnement te bevestigen.

Uw inloggegevens:



Gebruikersnaam:
*******


Wachtwoord:
*******


Bij problemen kunt u dit mailtje gewoon beantwoorden, dan helpen wij u graag verder!

Met vriendelijke groet,

*******************





--alt-9a1a46a7beef2f8c35229c75e9a17861
Content-Type: text/html; charset="utf-8"
Content-Transfer-Encoding: 7bit
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body style="color: #330;
    font-family: Calibri, Tahoma, Verdana, Arial, Helvetica, sans-serif;
    font-size: 14px;">
<p style="clear: left;
    margin: 4px 0 16px 0;
    padding: 0px;">Beste ,</p>
<p style="clear: left;
    margin: 4px 0 16px 0;
    padding: 0px;">Bedankt voor uw aanmelding op ********. Om uw inschrijving te bevestigen kunt u klikken op de volgende link:</p>
<p style="clear: left;
    margin: 4px 0 16px 0;
    padding: 0px;"><a href="http://www.********/aanmelden/ondernemers?confirm_1515xe7q3zYrM">Klik hier om uw abonnement te bevestigen.</a></p>
<p style="clear: left;
    margin: 4px 0 16px 0;
    padding: 0px;">Uw inloggegevens:</p>
<table style="border: 1px solid #ed843c;">
<tr>
<td style="padding: 2px;">Gebruikersnaam:</td>
<td style="padding: 2px;">*****</td>
</tr>
<tr>
<td style="padding: 2px;">Wachtwoord:</td>
<td style="padding: 2px;">***** </td>
</tr>
</table>
<p style="clear: left;
    margin: 4px 0 16px 0;
    padding: 0px;">Bij problemen kunt u dit mailtje gewoon beantwoorden, dan helpen wij u graag verder!</p>
<p style="clear: left;
    margin: 4px 0 16px 0;
    padding: 0px;">Met vriendelijke groet,</p>
<p style="clear: left;
    margin: 4px 0 16px 0;
    padding: 0px;">*************</p>
<p style="clear: left;
    margin: 4px 0 16px 0;
    padding: 0px;"><img src="http://www.****************.nl/elements/logo.png" alt="logo"></p>
</body></html>

--alt-9a1a46a7beef2f8c35229c75e9a17861--


Iemand enig idee wat ik fout doe?

Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Waarom gebruik je geen PHPMailer of Zend_Mail om maar wat te noemen? Als je een beetje gezocht had op hier dan had je die tip vast wel gevonden. Mailtjes maken moet je eigenlijk niet zelf willen doen als er al zoveel goede classes voor te krijgen zijn die er gewoon veel beter overna gedacht hebben dan jij dat zelf gaat kunnen.

Acties:
  • 0 Henk 'm!

  • xilent_xage
  • Registratie: Februari 2005
  • Laatst online: 23-09-2024
Cartman! schreef op maandag 15 maart 2010 @ 10:56:
Waarom gebruik je geen PHPMailer of Zend_Mail om maar wat te noemen? Als je een beetje gezocht had op hier dan had je die tip vast wel gevonden. Mailtjes maken moet je eigenlijk niet zelf willen doen als er al zoveel goede classes voor te krijgen zijn die er gewoon veel beter overna gedacht hebben dan jij dat zelf gaat kunnen.
Tsja, daar ben je tweaker voor he :) Ik vind het sowieso leuk om zelf te begrijpen, maar daarnaast heb ik mijn eigen mailclass op mijn eigen framework gebaseerd. Dat was makkelijker dan een bestaande class ombouwen.

Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Tweaker betekent niet dat je alles zelf moet maken, soms moet je gewoon gebruik maken van oplossingen die gewoon nu beter zijn dan jij ze ooit kunt maken, dat is echt niet erg. Een bestaande class ombouwen zou niet hoeven, hij doet t toch out of the box al.

Ik hoop trouwens dat je nog validatie doet op de gegevens die je in de headers stopt elders in je script en dat dit slechts een kleine samengevoegde code is uit je class, echt OOP zit het anders niet in elkaar namelijk iit. de genoemde voorbeelden.

Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 17:03

Creepy

Tactical Espionage Splatterer

Als je een header probleem vermoedt, ga dat dan eerst eens controleren. Dus bekijk de volledige e-mail zoals deze binnenkomt en kijk eens naar de headers en boundaries. Misschien ben je ergens een regeleinde vergeten, of heb je er ergens 1 teveel staan. Voor jou simpel om te controleren, voor ons is dat met de huidige code onmogelijk ;)

Dus wat heb je zelf al lopen debuggen? Er zijn overigens de laatste tijd meer topics over dit probleem geweest . Heeft de search je hier echt niet kunnen helpen? En weet je ook zeker dat je niet iets van PHPMailer o.i.d. kan gebruiken. Als je zoals Cartman! aangeeft bepaalde zaken niet check dan is het erg eenvoudig om jou script te gebruiken om spam te versturen d.m.v. header injectie.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • xilent_xage
  • Registratie: Februari 2005
  • Laatst online: 23-09-2024
Cartman! schreef op maandag 15 maart 2010 @ 11:08:
Tweaker betekent niet dat je alles zelf moet maken, soms moet je gewoon gebruik maken van oplossingen die gewoon nu beter zijn dan jij ze ooit kunt maken, dat is echt niet erg. Een bestaande class ombouwen zou niet hoeven, hij doet t toch out of the box al.

Ik hoop trouwens dat je nog validatie doet op de gegevens die je in de headers stopt elders in je script en dat dit slechts een kleine samengevoegde code is uit je class, echt OOP zit het anders niet in elkaar namelijk iit. de genoemde voorbeelden.
Inderdaad een citaat uit mn code. En natuurlijk kan het soms handig zijn om een bestaande oplossing te gebruiken. In mijn geval is dat naar mijn mening niet zo. Maar dat is natuurlijk een andere discussie. Terug on topic: Iemand die ziet wat er misgaat in mijn voorbeeld?

Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Zoals Creepy al zei net: controleer je headers goed.

Overigens kun je je html-mails beter beginnen bij <table> ipv. een doctype etc. mee te sturen, veel providers strippen doctypes, body's en head's zonder pardon uit je code. Oldschool tabellen met inline styling dus ;)

Acties:
  • 0 Henk 'm!

  • xilent_xage
  • Registratie: Februari 2005
  • Laatst online: 23-09-2024
Creepy schreef op maandag 15 maart 2010 @ 11:13:
Als je een header probleem vermoedt, ga dat dan eerst eens controleren. Dus bekijk de volledige e-mail zoals deze binnenkomt en kijk eens naar de headers en boundaries. Misschien ben je ergens een regeleinde vergeten, of heb je er ergens 1 teveel staan. Voor jou simpel om te controleren, voor ons is dat met de huidige code onmogelijk ;)

Dus wat heb je zelf al lopen debuggen? Er zijn overigens de laatste tijd meer topics over dit probleem geweest . Heeft de search je hier echt niet kunnen helpen? En weet je ook zeker dat je niet iets van PHPMailer o.i.d. kan gebruiken. Als je zoals Cartman! aangeeft bepaalde zaken niet check dan is het erg eenvoudig om jou script te gebruiken om spam te versturen d.m.v. header injectie.
De volledige email staat gepaste in de openingspost. Ik heb zelf al verschillende RFCs gelezen en ook de nodige posts op tweakers voorbij zien komen. Voor zover ik kan zien wijkt mijn uitgepoepte code niet af en zou het gewoon moeten werken.

Simpel gezegd volg ik deze benadering:

In de header zeg ik: Content-Type: multipart/alternative; boundary="alt-9a1a46a7beef2f8c35229c75e9a17861"

Vervolgens in de content:

code:
1
2
3
4
5
6
7
8
9
10
11
--alt-9a1a46a7beef2f8c35229c75e9a17861
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 7bit
[hier de plain text content]

--alt-9a1a46a7beef2f8c35229c75e9a17861
Content-Type: text/html; charset="utf-8"
Content-Transfer-Encoding: 7bit
[hier de html text content]

--alt-9a1a46a7beef2f8c35229c75e9a17861--


Dit is dezelfde benadering als in elke tutorial enz, dus zou toch moeten werken?

Acties:
  • 0 Henk 'm!

  • schoene
  • Registratie: Maart 2003
  • Laatst online: 21:17
De headers in een MIME bericht moeten altijd opgevolgd worden door een blanco regel. Dit is in jouw voorbeeld niet het geval voor het html-gedeelte.

Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 17:03

Creepy

Tactical Espionage Splatterer

xilent_xage schreef op maandag 15 maart 2010 @ 11:26:
[...]


De volledige email staat gepaste in de openingspost. Ik heb zelf al verschillende RFCs gelezen en ook de nodige posts op tweakers voorbij zien komen. Voor zover ik kan zien wijkt mijn uitgepoepte code niet af en zou het gewoon moeten werken.
...
Dit is dezelfde benadering als in elke tutorial enz, dus zou toch moeten werken?
Lees mijn post nog eens goed door ;) Je kan dit alleen goed debuggen door van de *ontvangen* e-mail de volledige broncode (dus de ruwe ontvangen e-mail inclusief alle headers) te controleren. Wij kunnen zo niet controleren of je bijv. tussen je headers en e-mail content nog extra lege regels hebben zitten, of er door andere stukken code nog andere zaken tussen je headers en content worden geplakt etc. Dat zie je dus alleen als je de daadwerkelijke ontvangen e-mail gaat controleren. Debuggen is niet zeggen "ik doe dit en dit en dus moet het er zo en zo uitkomen", maar het daadwerkelijk controleren van de echte output en stap voor stap door de code heen te lopen en aan de hand daarvan conclusies trekken.

[ Voor 10% gewijzigd door Creepy op 15-03-2010 14:36 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • xilent_xage
  • Registratie: Februari 2005
  • Laatst online: 23-09-2024
Bedankt schoene, dat was em!

Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Ik zou toch nog alle tips even goed doorlezen:

- je script nu kan erg gevoelig zijn voor spam, met iets als PHPMailer wordt dat geregeld voor je
- scripts als PHPMailer zijn OOP opgezet voor makkelijk gebruik, je huidige opzet lijkt niet echt OOP te zijn.
- html mails niet voorzien van doctype, body,head etc.maar direct beginnen bij je content met inline styling
Pagina: 1