簡體   English   中英

在php中發送HTML電子郵件?

[英]Sending HTML Email in php?

這是代碼。

$to = 'youraddress@example.com';

$subject = 'Test HTML email';
//create a boundary string. It must be unique
//so we use the MD5 algorithm to generate a random hash
$random_hash = md5(date('r', time()));
//define the headers we want passed. Note that they are separated with \r\n
$headers = "From: webmaster@example.com\r\nReply-To: webmaster@example.com";
//add boundary string and mime type specification
$headers .= "\r\nContent-Type: multipart/alternative; boundary=\"PHP-alt-".$random_hash."\"";
//define the body of the message.
ob_start(); //Turn on output buffering
?>
--PHP-alt-<?php echo $random_hash; ?> 
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: 7bit

Hello World!!! 
This is simple text email message. 

--PHP-alt-<?php echo $random_hash; ?> 
Content-Type: text/html; charset="iso-8859-1"
Content-Transfer-Encoding: 7bit

<h2>Hello World!</h2>
<p>This is something with <b>HTML</b> formatting.</p>

--PHP-alt-<?php echo $random_hash; ?>--
<?
//copy current buffer contents into $message variable and delete current output buffer
$message = ob_get_clean();
//send the email
$mail_sent = @mail( $to, $subject, $message, $headers );
//if the message is sent successfully print "Mail sent". Otherwise print "Mail failed" 
echo $mail_sent ? "Mail sent" : "Mail failed";
?>

我做得不好。 希望有人可以幫我一個忙。

  1. 為什么要生成隨機哈希?

  2. 為什么必須在標頭中添加邊界字符串和mime類型規范?

  3. 為什么要使用ob_start();?

4。

--PHP-alt-<?php echo $random_hash; ?> 
 Content-Type: text/html; charset="iso-8859-1"
 Content-Transfer-Encoding: 7bit

這些行是什么意思? 我可以刪除它們嗎? 謝謝。

  1. 生成隨機散列是為了避免它與您的內容沖突。

  2. “邊界字符串”告訴電子郵件客戶端標題開始和停止的位置以及實際電子郵件內容的開始位置。 由於要發送HTML電子郵件,因此必須明確告知電子郵件客戶端它將接收HTML,而不僅僅是任何內容。

  3. 否則,HTML和內容將直接發送到瀏覽器,即用戶正在查看您的網站。 相反,您想將HTML存儲在變量中,並使用它。

  4. Content-Type告訴電子郵件客戶端您要發送哪種內容以及如何對其進行編碼

當然您不能刪除它們。 這就像向您發送PDF文件而沒有說它是PDF且沒有適當的擴展名-您將不知道如何處理。

注意

電子郵件,網站,任何具有結構(包括大多數文件)的結構通常都以“標頭”和“正文”結構布置。

標頭告訴文件閱讀器“正文”中應包含的內容。 “正文”是讀者應該做的實際內容。

我不確定為什么在這里使用隨機哈希,但是我認為確保唯一的邊界字符串,防止部件之間的名稱沖突只是額外的安全性。

關於內容類型:您需要指定該類型以告知郵件客戶端它應該呈現HTML,並指示您的郵件是多部分的。 多部分表示有多個部分,在您的情況下,這是一個基於文本的部分和一個HTML部分。

邊界部分用於將一個部分的內容與另一部分的內容以及標題分開。

根本不需要使用PHP輸出緩沖區(ob_start和ob_end_clean),也可以只使用引號或HEREDOC輸入字符串。 使用輸出緩沖區的一個優點是可以結束PHP(使用?> ),並讓IDE幫助您編寫HTML。 確保添加ob_end_clean(); 但是,它尚未包含在您的代碼中。

  1. 不用了 只是它使事情變得簡單:分隔符必須是不屬於郵件內容的字符串。

  2. 您需要一個邊界以將消息分成幾部分。 電子郵件就是字符流。 您需要一個MIME類型,以便電子郵件客戶端可以知道每個部分包含的內容。 否則,它不知道它是否為HTML(或JPEG圖片或PowerPoint演示文稿...)。

  3. 老實說,它看起來像是對常規字符串分配的過度復雜替換。 而不是做$message = 'Hello World!'; ,它會打印Hello World! 到標准輸出,並將標准輸出捕獲到變量中。

  4. 這些行表示您正在完成消息的一部分,並且正在開始一個包含HTML的新消息。 如果您不想添加包含HTML但又不是...的消息部分,則可以刪除它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM