每個網絡應用程序的主要組件之一就是發送電子郵件的能力。
現在,這并不意味著每個 Web 應用程序都是自己的郵件客戶端(盡管人們確實創建了自己的郵件客戶端)。
相反,我的意思是,當用戶注冊、用戶修改密碼、系統中的某些內容發生變化時,或者更一般地說,每當發生網站所有者想要通知用戶的情況時,應用程序通常會發送電子郵件.
到目前為止,在本系列中,我們已經介紹了:
- 用戶管理
- 權限
- 會話管理
上一篇文章可以說是我們將要介紹的最復雜的文章之一;但是,對于那些希望向項目添加更多高級功能的人來說,這是必要的。
話雖如此,我們將從一些更復雜的材料中休息一下,看看 WordPress 在發送電子郵件方面必須提供什么。
了解電子郵件
在我們深入了解 WordPress API 在發送電子郵件、自定義電子郵件等方面提供的功能之前,了解有關電子郵件的一些知識非常重要。
也就是說,了解創建實際電子郵件的組成部分非常重要 – 畢竟,它不僅僅是地址、主題和內容。
在我們開始構建自己的自定義電子郵件之前,有一些技術上的細微差別值得理解。
標題
簡而言之,電子郵件標頭包含最少的信息集,包括:電子郵件的發送者以及電子郵件的發送地址。
通常,您可能會看到標頭中包含的其他信息。例如,此信息可能包括發送電子郵件的時間戳。
對于 WordPress,除非另有指定,否則電子郵件標頭中指定的發件人始終被定義為 WordPress 中的默認發件人。
例如,如果您希望將回復地址設置為“donotreply@domain.com”,那么您必須對此進行自定義。
此外,通常最好以數組的形式使用電子郵件標頭,以便您可以輕松構建、指定和傳遞地址、抄送地址和密件抄送收件人。
MIME 類型
當談到電子郵件遵循的格式時,您可能會看到兩種形式:
- 純文本
- HTML
您已經習慣在大多數現代電子郵件客戶端中看到 HTML;但是,如果您有一個更簡單的客戶端,將其設置為僅顯示純文本,或者您在稍舊的手機上閱讀電子郵件,那么您將以純文本形式閱讀內容。
WordPress 可以以純文本或 HTML 形式發送電子郵件。
當我們查看如何以編程方式發送電子郵件的示例時,我們將具體了解如何做到這一點。簡而言之,有一個鉤子可以讓它變得非常簡單 – 但我們會等待看到它的實際效果,直到我們介紹電子郵件的其余必要部分。
附件
如您所知,附件實際上是您附加到電子郵件并發送給收件人的任何文件。
問題是,有一些管理電子郵件的規則 – 但它們不一定是由軟件設置的。相反,服務器、電子郵件客戶端和其他各種規則限制了我們可以在收件箱中接收的內容。
例如:
- 某些客戶端不允許發送 zip 文件或可執行文件
- 許多電子郵件服務都有可附加的最大文件大小限制
- 某些類型的電子郵件可能會根據其附件(或其內容)被標記為垃圾郵件
無論如何,這超出了我們的控制范圍 – 我們只需要知道我們向誰發送電子郵件的限制,并確保我們遵守這些限制。
為此,創建通過 WordPress 電子郵件發送的附件非常簡單。
雖然附件顯然不是必需的,但您可能想要附加單個文件甚至多個文件。在 WordPress 中,這可以通過字符串或數組來完成。
我們現在不會具體了解如何做到這一點,但當我們查看如何以編程方式發送電子郵件的示例時,我們將立即了解這一點。
收件人、主題和消息
在最基本的層面上,每封電子郵件都包含一個“收件人”電子郵件地址、一個“主題”和一個“消息” ”。
在 WordPress 中,這些設置也非常容易 – 只需為每個設置提供字符串,然后就可以開始了。
當然,如果您想向多個人發送電子郵件,您可以迭代地址集合并為每個用戶發送一封電子郵件,或者您可以向 WordPress 提供一組收件人郵件 API,它會將電子郵件發送給所有包含在內的人。
請記住:如果您想指定不同的 reply-to 地址,請在我們在本文前面介紹的標頭中指定該地址。
使用 WordPress 電子郵件 API
綜上所述,我們準備好實際了解一下 WordPress 電子郵件 API。
簡而言之,所有功能都包含在一個名為 wp_mail 的函數中;但是,如果我們想充分利用該應用程序提供的功能,有一些我們需要注意的地方。
所需的掛鉤
具體來說,我們將使用以下鉤子:
- wp_mail_content_type 允許我們定義正在發送的電子郵件的 MIME 類型
- wp_mail_from 是一個過濾器,我們可以使用它來定義發件人地址,而不是使用 $headers 數組
- wp_mail_from_name?是一個過濾器,我們可以使用它來定義此人的發件人,而不是使用 $headers 數組
- wp_login 是我們用于演示的鉤子,這樣每當有人登錄 WordPress 儀表板時我們就會向某人發送電子郵件
為了完整起見,我將在下面分享整個代碼,然后我們將逐步完成它。
源代碼
<?php function acme_email_individual( $input ) { /** * Note: assume that $input has keys for 'email-address'. */ // Generate the password $password = wp_generate_password ( 12, false ); // Email the user that they're profile was created $message = 'Hey There,'; $message .= '<br /><br>'; $message .= 'Your account has been created. Your login information is below:'; $message .= '<br>'; $message .= '
- ‘; $message .= ‘
- Username: ‘ . $input[’email-address’] . ‘
- Password: ‘ . $password . ‘
‘; $message .= ‘
‘; $message .= ‘
‘; $message .= ‘
‘; $message .= ‘You can login to the application here.’; add_filter( ‘wp_mail_content_type’, create_function( ”, ‘return “text/html”;’ ) ); add_filter( ‘wp_mail_from’, ‘acme_mail_from’ ); add_filter( ‘wp_mail_from_name’, ‘acme_mail_from_name’ ); wp_mail( $input[’email-address’], ‘Your Acme Account Has Been Created!’, $message, array() ); } function acme_mail_from( $email ) { // NOTE: replace [at] with @. This was causing problems with the syntax highlighter. return ‘donotreply[at]acme.com’; } function acme_mail_from_name( $name ) { return ‘The Acme Company’; }
如果您到目前為止一直在閱讀本文,那么這一切都不會太令人驚訝:畢竟,我們正在利用 WordPress 提供的掛鉤,我們正在構建字符串作為函數參數傳遞,然后我們調用 wp_mail 函數。
但是請注意,我們傳遞一個空數組作為此電子郵件的 $headers 參數。這是因為我們使用自定義過濾器來設置“發件人名稱”和“發件人地址”,使用過濾器和掛鉤函數而不是數組。
這種方式不一定比其他方式更好;然而,它的目的是證明有多種方法可以達到相同的結果。
現在,轉向數據!
這是 WordPress 的另一個功能,可以讓您輕松地將電子郵件功能包含到您的 Web 應用程序中。
事實上,我認為 WordPress 的事件模型使得在任何可以想象到的場景中引入電子郵件功能變得異常容易 – 如果有可用的鉤子,就可以發送電子郵件。
話雖如此,是時候將我們的注意力轉向 Web 應用程序開發最常見的方面之一:數據管理。
具體來說,我們需要研究如何將信息保存到數據庫并從數據中檢索信息,以及如何安全有效地完成這些操作。
因此,從下一篇文章開始,我們將這樣做。