Email bijlage onder windows test server ok maar onder linux fout
Door
Rene Wennekes
op 14-01-2014 16:31
gewijzigd op 14-01-2014 16:32
4.151 views
Hallo,
ik heb een php script waarbij een pdf als e-mail bijlage moet worden verstuurd. Dit lukt 100% goed op mijn windows test server (IIS).
Maar zodra ik hetzelfde wil doen op een linux webserver (RaspberryPI) met Apache dan krijg ik de mail met heleboel tekens in de mail.
Ik zal de hele pagina besparen en alleen de mail routine vermelden.
<?php
// email fields: to, from, subject, and so on
$message = $bericht;
$from_name = "factuur ".$invoice_number;
$header = "From: ".$from_name." <".$email_from.">\r\n";
Ik zou aan willen raden, om de headers 1 voor 1 op te nemen als:
$header .= 'een of andere header' . "\r\n";
$header .= 'een andere header' . "\r\n";
En dus niet met \n of \r\n halverwege
en ook niet beginnen met een enter.
Je voegt namelijk eerst een from header toe (regel 5) die afgesloten wordt met een enter, en daarna op regel 10 doe je nog een soort van enter.
Maar een mail bericht sluit de headers af middels een dubbele enter. Zeg maar een witregel tussen de headers en de mail content.
Als nu jouw linux mail server die \n wel als enter ziet, dan zit er dus een dubbele enter na de from-header en is de rest content van de mail.
[size=xsmall]Toevoeging op 15/01/2014 10:48:08:[/size]
andere tip:
als een mail meer is dan je simpelweg in 2 regels + mail() kwijt kunt, is het vaak veel eenvoudiger om PHPMailer of Swiftmailer te gebruiken.
Dat pakket is uitgebreid getest met bergen opties. Die zal automagisch een hoop van de headers regelen, zelf de juiste enters op de juiste plek zetten en controles doen op de invoer (is het een mailadres bijvoorbeeld)
Note that there is a big difference between the behavior of this function on Windows systems vs. UNIX systems. On Windows it delivers directly to an SMTP server, while on a UNIX system it uses a local command to hand off to the system's own MTA.
The upshot of all this is that on a Windows system your message and headers must use the standard line endings \r\n as prescribed by the email specs. On a UNIX system the MTA's "sendmail" interface assumes that recieved data will use UNIX line endings and will turn any \n to \r\n, so you must supply only \n to mail() on a UNIX system to avoid the MTA hypercorrecting to \r\r\n.
If you use plain old \n on a Windows system, some MTAs will get a little upset. qmail in particular will refuse outright to accept any message that has a lonely \n without an accompanying \r.