2013-05-07 61 views
0

我有一些奇怪的事情與PHP郵件()函數。 當我用php發送郵件時,它隨機添加空格,並且一些浮點元素不起作用。PHP郵件增加了隨機空間和浮動元素

這些都是我的頭:

$headers  = 'From: ' . $website_naam . ' <' . $eigen_emailadres . '>' . PHP_EOL; 
$headers .= 'Reply-To: ' . $naam_verzender . ' <' . $email_verzender . '>' . PHP_EOL; 
$headers .= ($bcc_emailadres != '') ? 'Bcc: ' . $bcc_emailadres . PHP_EOL : ''; 
$headers .= 'X-Mailer: PHP/' . phpversion() . PHP_EOL; 
$headers .= 'X-Priority: Normal' . PHP_EOL; 
$headers .= 'MIME-Version: 1.0' . PHP_EOL; 
$headers .= 'Content-type: text/html; charset=iso-8859-1' . PHP_EOL; 

這是我的消息:

$message = '<html><body style="font-family:Open Sans; margin:0; padding:0; font-size:14px; color:#4a4a4a;">'; 
$message .= '<head>'; 
$message .= '<link href="http://fonts.googleapis.com/css?family=Open+Sans:400,300,600" rel="stylesheet" type="text/css">'; 
$message .= '</head>'; 
$message .= '<div style="width:930px; margin-top:30px; background-color:#fff;">'; 
$message .= '<div id="logo" style="width:395px; height:54px; float:left;"><a href="http://www.klumpers.nl"><img src="http://www.klumpers.nl/images/logo.png" alt="Klumpers Goud en Diamanthandel" /></a></div>'; 
$message .= '<div style="clear:both;"></div>'; 
$message .= '<div style="height:1px; width:930px; background-color:#e2e2e2; margin-top:15px;"></div>'; 
$message .= '<div style="width:410px; background-color:#f7f7f7; margin-top:20px; padding:20px; float:left;">'; 
$message .= '<p style="font-size:20px; font-weight:400; color:#4a4a4a; margin:0 0 15px 0;">Gouden sieraden en voorwerpen</p>'; 
$message .= '<p style="line-height:12px;">&nbsp;&nbsp;8 karaat 33,3% goud <span style="float:right; margin-right:20px;">&#8364; '.sprintf("%01.2f",round($koers_goud * 0.333,2)).' per gram</span></p>'; 
$message .= '<p style="line-height:12px;">14 karaat 58,5% goud <span style="float:right; margin-right:20px;">&#8364; '.sprintf("%01.2f",round($koers_goud * 0.585,2)).' per gram</span></p>'; 
$message .= '<p style="line-height:12px;">18 karaat 75,0% goud <span style="float:right; margin-right:20px;">&#8364; '.sprintf("%01.2f",round($koers_goud * 0.750,2)).' per gram</span></p>'; 
$message .= '<p style="line-height:12px;">20 karaat 83,3% goud <span style="float:right; margin-right:20px;">&#8364; '.sprintf("%01.2f",round($koers_goud * 0.833,2)).' per gram</span></p>'; 
$message .= '<p style="line-height:12px;">21 karaat 87,5% goud <span style="float:right; margin-right:20px;">&#8364; '.sprintf("%01.2f",round($koers_goud * 0.875,2)).' per gram</span></p>'; 
$message .= '<p style="line-height:12px;">22 karaat 91,6% goud <span style="float:right; margin-right:20px;">&#8364; '.sprintf("%01.2f",round($koers_goud * 0.916,2)).' per gram</span></p>'; 
$message .= '<p style="line-height:12px;">24 karaat 99,9% goud <span style="float:right; margin-right:20px;">&#8364; '.sprintf("%01.2f",round($koers_goud * 0.999,2)).' per gram</span></p>'; 
$message .= '<p style="font-size:20px; font-weight:400; color:#4a4a4a; margin:15px 0 15px 0;">Zilveren sieraden en voorwerpen</p>'; 
$message .= '<p style="line-height:12px;">2e gehalte zilver 83,5% <span style="float:right; margin-right:20px;">&#8364; '.sprintf("%01.2f",round($koers_zilver * 0.80 * 0.835,2)).' per kilo</span></p>'; 
$message .= '<p style="line-height:12px;">1e gehalte zilver 92,5% <span style="float:right; margin-right:20px;">&#8364; '.sprintf("%01.2f",round($koers_zilver * 0.80 * 0.925,2)).' per kilo</span></p>'; 
$message .= '<p style="line-height:12px;">Zilveren gulden 72,0% <span style="float:right; margin-right:20px;">&#8364; '.sprintf("%01.2f",round($koers_zilver_gram * 0.80 * 0.720 * 6.475/1000,2)).' per stuk</span></p>'; 
$message .= '<p style="line-height:12px;">Zilveren rijksdaalder 72,0% <span style="float:right; margin-right:20px;">&#8364; '.sprintf("%01.2f",round($koers_zilver_gram * 0.80 * 0.720 * 15/1000,2)).' per stuk</span></p>'; 
$message .= '<p style="line-height:12px;">Zilveren tientje 72,0% <span style="float:right; margin-right:20px;">&#8364; '.sprintf("%01.2f",round($koers_zilver_gram * 0.80 * 0.720 * 25/1000,2)).' per stuk</span></p>'; 
$message .= '<p style="font-size:20px; font-weight:400; color:#4a4a4a; margin:15px 0 15px 0;">Officieel gestempelde edelmetaal baren</p>'; 
$message .= '<p style="line-height:12px;">Baren fijn goud 99,99% <span style="float:right; margin-right:20px;">&#8364; '.sprintf("%01.2f",round($koers["goud_koers"],2)).' per kilo</span></p>'; 
$message .= '<p style="line-height:12px;">Baren fijn zilver 99,9% <span style="float:right; margin-right:20px;">&#8364; '.sprintf("%01.2f",round($koers["zilver_koers"],2)).' per kilo</span></p>'; 
$message .= '<p style="line-height:12px;">Baren fijn platina 99,5% <span style="float:right; margin-right:20px;">&#8364; '.sprintf("%01.2f",round($koers["platina_koers"],2)).' per kilo</span></p>'; 
$message .= '<p style="line-height:12px;">Baren fijn palladium 99,5% <span style="float:right; margin-right:20px;">&#8364; '.sprintf("%01.2f",round($koers["palladium_koers"],2)).' per kilo</span></p>'; 
$message .= '</div>';// einde linker box 
$message .= '<div style="width:410px; background-color:#f7f7f7; margin-top:20px; padding:20px; float:right;">'; 
$message .= '<p style="font-size:20px; font-weight:400; color:#4a4a4a; margin:0 0 15px 0;">Gouden Munten</p>'; 
$message .= '<p style="line-height:12px;">Muntgoud 90,00% <span style="float:right; margin-right:20px;">&#8364; '.sprintf("%01.2f",round($koers_goud * 0.900,2)).' per gram</span></p>'; 
$message .= '<p style="line-height:12px;">Dukaat 3,49 gram <span style="float:right; margin-right:20px;">&#8364; '.sprintf("%01.2f",round($koers_goud * 0.983 * 3.49,2)).' per stuk</span></p>'; 
$message .= '<p style="line-height:12px;">20 Frank Belgie 6,45 gram <span style="float:right; margin-right:20px;">&#8364; '.sprintf("%01.2f",round($koers_goud * 0.900 * 6.45,2)).' per stuk</span></p>'; 
$message .= '<p style="line-height:12px;">20 Frank Frankrijk 6,45 gram <span style="float:right; margin-right:20px;">&#8364; '.sprintf("%01.2f",round($koers_goud * 0.900 * 6.45,2)).' per stuk</span></p>'; 
$message .= '<p style="line-height:12px;">20 Frank Zwitserland 6,45 gram <span style="float:right; margin-right:20px;">&#8364; '.sprintf("%01.2f",round($koers_goud * 0.900 * 6.45,2)).' per stuk</span></p>'; 
$message .= '<p style="line-height:12px;">20 Lire Italie 6,45 gram <span style="float:right; margin-right:20px;">&#8364; '.sprintf("%01.2f",round($koers_goud * 0.900 * 6.45,2)).' per stuk</span></p>'; 
$message .= '<p style="line-height:12px;">10 Gulden Nederland 6,72 gram <span style="float:right; margin-right:20px;">&#8364; '.sprintf("%01.2f",round($koers["goud_koers"]/1000 * 0.92 * 0.900 * 6.72,2)).' per stuk</span></p>'; 
$message .= '<p style="line-height:12px;">20 Mark Duitsland 7,96 gram <span style="float:right; margin-right:20px;">&#8364; '.sprintf("%01.2f",round($koers_goud * 0.900 * 7.96,2)).' per stuk</span></p>'; 
$message .= '<p style="line-height:12px;">Souvereign Engeland 7,99 gram <span style="float:right; margin-right:20px;">&#8364; '.sprintf("%01.2f",round($koers_goud * 0.916 * 7.99,2)).' per stuk</span></p>'; 
$message .= '<p style="line-height:12px;">20 Kroner D-marken 8,96 gram <span style="float:right; margin-right:20px;">&#8364; '.sprintf("%01.2f",round($koers_goud * 0.900 * 8.96,2)).' per stuk</span></p>'; 
$message .= '<p style="line-height:12px;">100$ Canada 16,96 gram <span style="float:right; margin-right:20px;">&#8364; '.sprintf("%01.2f",round($koers_goud * 0.916 * 16.96,2)).' per stuk</span></p>'; 
$message .= '<p style="line-height:12px;">50 ECU Belgie 17,28 gram <span style="float:right; margin-right:20px;">&#8364; '.sprintf("%01.2f",round($koers_goud * 0.900 * 16.96,2)).' per stuk</span></p>'; 
$message .= '<p style="line-height:12px;">Maple Leaf Canada 31,10 gram <span style="float:right; margin-right:20px;">&#8364; '.sprintf("%01.2f",round($koers["goud_koers"]/1000 * 0.96 * 0.999 * 31.1035,2)).' per stuk</span></p>'; 
$message .= '<p style="line-height:12px;">100$ Australie 31,10 gram <span style="float:right; margin-right:20px;">&#8364; '.sprintf("%01.2f",round($koers["goud_koers"]/1000 * 0.96 * 0.999 * 31.1035,2)).' per stuk</span></p>'; 
$message .= '<p style="line-height:12px;">20$ USA 33,43 gram <span style="float:right; margin-right:20px;">&#8364; '.sprintf("%01.2f",round($koers_goud * 0.900 * 33.43,2)).' per stuk</span></p>'; 
$message .= '<p style="line-height:12px;">100 Corona Oosterijk 33,87 gram <span style="float:right; margin-right:20px;">&#8364; '.sprintf("%01.2f",round($koers_goud * 0.900 * 33.87,2)).' per stuk</span></p>'; 
$message .= '<p style="line-height:12px;">Krugerrand Zuid Afrika 33,93 gram <span style="float:right; margin-right:20px;">&#8364; '.sprintf("%01.2f",round($koers["goud_koers"]/1000 * 0.92 * 0.916 * 33.93,2)).' per stuk</span></p>'; 
$message .= '<p style="line-height:12px;">50$ USA 33,93 gram <span style="float:right; margin-right:20px;">&#8364; '.sprintf("%01.2f",round($koers_goud * 0.916 * 33.93,2)).' per stuk</span></p>'; 
$message .= '<p style="line-height:12px;">50 Pesos Mexico 41,67 gram <span style="float:right; margin-right:20px;">&#8364; '.sprintf("%01.2f",round($koers_goud * 0.900 * 41.67,2)).' per stuk</span></p>'; 
$message .= '</div>'; // einde rechter box 
$message .= '<div style="clear:both;"></div>'; 
$message .= '</div>';// einde container 
$message .= '</body></html>'; 

而這種輸出的G-郵件客戶端這樣的:

enter image description here

其它電子書郵件客戶更糟糕。

+0

您是否檢查您在標題中輸入的姓名和電子郵件地址是否有效?如果沒有,你打開郵件頭注入。這些HTML實體應該寫成沒有空格,例如'€'。爲什麼不用UTF-8發送郵件並提供簡單的'''? – 2013-05-07 15:29:13

+1

css漂浮在其他css屬性之間不幸在大多數電子郵件客戶端不起作用,所以我懷疑PHP的mail()函數與 – Sean 2013-05-07 15:29:14

+1

有什麼關係,請參閱http://www.campaignmonitor.com/css/以獲取更多信息 – Sean 2013-05-07 15:30:29

回答

5

這不是mail功能,弄亂了事情。這是郵件客戶端。不要依賴電子郵件中的浮動元素。電子郵件客戶端的HTML和CSS支持與瀏覽器不同。

您應該改用表格。至少他們是可靠的。

0

我同意Bart說CSS是郵件客戶端的一個問題。但是,我在那裏有同樣的問題,並僅使用列表簡單的HTML,見下圖:

<ol> 
<li>{$orderID} is ouder dan 2 maand en niets betaald is geannuleerd!</li> 
</ol> 

這導致:

45645645 is ouder dan 2 maand en niets betaald is geannuleerd! 
68867676 is ouder dan 2 maand en niets betaald is geannuleerd! 
45678545 is ouder dan 2 maan d en niets betaald is geannuleerd! 
45667845 is ouder dan 2 maand en niets betaald is geannuleerd! 
97856745 is ouder dan 2 maand en niets betaald is geannuleerd! 

這是第3行顯示,不應該存在的空間。有時甚至在郵件中還有HTML < li>,但也在HTML標籤內部添加了一個空格。當一切都變成表格時,也會發生同樣的情況。

對我來說,解決方案是在HTML中添加一個\n。所以上面的代碼更改爲:

<ol>\n 
<li>{$orderID} is ouder dan 2 maand en niets betaald is geannuleerd!</li>\n 
</ol>\n 

現在郵件中的空格消失了。所以不僅僅是CSS。不知道爲什麼\n解決了這個問題,但它的工作原理!