2009-11-24 105 views
2

我遇到一個奇怪的問題,難以診斷,因爲
它是隨機的。我已經構建了一個應用程序發送一個電子郵件
很好的文字量(沒有確切的字符數,但可以得到它)。電子郵件中的空白問題

在html電子郵件中,內容中隨機出現一個空格。

請參閱以下的空間如何飄蕩,是隨機的例子:

1- "Th ere are several things being discussed in this email." 
2- "There are se veral things being discussed in this email." 
3- "There are severa l things being discussed in this email." 

這whitepace問題也發生了聯繫。到目前爲止,在hotmail和gmail中發現了這個問題。

有人有什麼想法嗎?

$ header =「MIME-Version:1.0 \ r \ n」;
$ header。=「Content-type:text/html; charset = utf-8 \ r \ n」;
$ header。=「From:abc \ r \ n」;
$ subject =「abc」;
$ mail_body =「Hello!」;
$ mail_body。=「content」;
郵件($ email_address,$ subject,$ mail_body,$ header);

也就是說代碼給你一個想法大致..

回答

0

如果您發佈違規代碼,因爲有可能導致這許多事情這將有助於。

你使用mail()或phpmailer或swiftmailer嗎? 您的電子郵件是多部分還是純文字? 你自己解析你的模板嗎?

如果它是HTML,請張貼的HTML代碼客戶端接收等

是否有可能存在尾/航向的空間,當你連接字符串? 嘗試「微調」明添加到您$ mail_body就像每個元素:

$mail_body .= trim($content); 
+0

嗨特里...我剛剛發佈了示例代碼給你一個想法.. – rico 2009-11-24 03:59:49

+0

那麼你的僞代碼似乎沒有問題。修改答案以允許格式化。 – 2009-11-24 04:15:00

0

如果電子郵件的你「查看源文件」,是在源的空間,還是僅僅出現在渲染(可見)文本?我要做的第一件事就是看看電子郵件的來源,看看發生了什麼 - 我不會相信用於調試的渲染/可見文本。

另外,你說「在html電子郵件」。這意味着您可能會向不同的人發送純文本版本,或者發送給同一個人(作爲多部分消息)。如果是這樣的話,你能確認它不在嗎?

正如Terry所說,你可以發佈一些代碼,特別是發送消息的代碼和構建消息文本的發送代碼的一些/全部(如果很短)代碼?

+0

我剛剛發佈的代碼..hope有幫助。 問題是...即使鏈接有空白,它被轉換爲「+」號,並打破了鏈接。白色空間也是HTML源代碼。不幸的是,我無法分享這封電子郵件,因爲它是一封私人郵件......這又是隨機發生的。 如此令人沮喪... – rico 2009-11-24 04:07:07

+0

如果是我,我會添加代碼以在每次發送消息時將正文文本保存到臨時日誌文件(以及任何日期/時間戳,主題等等)識別來自另一個的消息)。 然後每次出現神祕的空間時,我都會將相應的日誌文件條目與該消息進行比較。這至少可以讓你弄清楚你的腳本是否在做,或者它是「以太」。 當然,你的腳本可能會插入空格。但是,然後你可以嘗試不同的方法(日誌文件)。 – Chirael 2009-11-24 04:27:07

+0

一些嘗試的東西...當你不需要變量插值時,嘗試使用單引號。 不是在該函數的部分中建立字符串,而是將消息構建放入其自己的函數中,並將填充值作爲參數放入,並返回一個大的消息字符串。然後,當然,單元測試地獄出信息構建功能:) (我個人喜歡創建消息模板文件,如「親愛的[姓名],感謝您購買[產品]等」,然後有一個通用的函數讀取文件並進行替換 - 通過這種方式,您可以更改沒有編輯代碼的消息) – Chirael 2009-11-24 04:34:11

1

當你有一個長行並且在RFC的72字符建議之後它自動被分解到下一行時,你可能會遇到這個問題。

其中

hey lots of stuff here Jimmy will probably be way longer than 72 characters 

將成爲

hey lots of stuff here Jimmy will probably be way longer than 72 charac 
ters 

而這將在一個HTML電子郵件呈現爲

hey lots of stuff here Jimmy will probably be way longer than 72 charac ters 
0

的問題,據我瞭解,是從您的線路運行時間過長。 PHP郵件程序增加了換行符(以及與它們一起的空白區)來分割長行。

我對此的建議是在行尾添加「\ r \ n」。這故意在您的文本中添加換行符,讓郵件程序自行完成。例如:

There are several things being discussed in this email.\r\n 

注意雙引號在這裏使用。單引號將簡單地附加到您的文本\ r \ n。

僅供參考:This question回答同樣的問題時,我有它。