整合營(yíng)銷(xiāo)服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢(xún)熱線(xiàn):

          僅需 5 步,用 JavaScript 直接通過(guò)前端發(fā)送電子郵件

          者 | Mateusz Iwaniuk

          譯者 | 明明如月,責(zé)編 | 夕顏

          出品 | CSDN(ID:CSDNnews)

          文章配套代碼: https://github.com/iwaniukooo11/email-sender

          現(xiàn)在,即使是創(chuàng)建最基本的網(wǎng)站,程序員也必須使用現(xiàn)代的功能和技術(shù)。甚至像為你的朋友創(chuàng)建簡(jiǎn)單的投資組合這樣的基本項(xiàng)目也可能涉及到一些問(wèn)題,比如從聯(lián)系人表單接收數(shù)據(jù)。有很多方法可以讀取這些數(shù)據(jù)。你可以將表單與數(shù)據(jù)庫(kù)連接起來(lái),然后從數(shù)據(jù)庫(kù)中讀取傳入的消息來(lái)實(shí)現(xiàn)功能,但這樣做會(huì)給不懂技術(shù)的客戶(hù)造成困難。

          你為什么不通過(guò)發(fā)送電子郵件傳輸信息?

          不使用數(shù)據(jù)庫(kù)就能接收到傳入的消息,絕對(duì)是最佳選擇,也是最方便用戶(hù)的選擇。但問(wèn)題來(lái)了—如何實(shí)現(xiàn)呢?你可能認(rèn)為需要使用某種后端語(yǔ)言。

          實(shí)際上,你不必使用任何如 php 或 python 這種后端語(yǔ)言,你甚至不需要用到 node.js!你需要的就是一個(gè)簡(jiǎn)單的EmailJS 庫(kù)。

          本文將介紹下面兩個(gè)重要功能:

          • 配置 emailjs 帳戶(hù)

          • 使用 JS 發(fā)送電子郵件

          請(qǐng)注意,在我的項(xiàng)目中,我使用了 gulp 和 webpack,我在 src 文件夾存放源碼,dist 存放最終發(fā)布版本的代碼。

          我將分 5 個(gè)步驟向你展示如何從頭開(kāi)始構(gòu)建電子郵件發(fā)送器。

          步驟1-用 HTML 創(chuàng)建表單

          首先需要?jiǎng)?chuàng)建一個(gè) HTML 表單。你不必放置像 required 或 max 這種驗(yàn)證屬性,因?yàn)樯院螅琾reventDefault 函數(shù)將在你的提交事件上運(yùn)行,它會(huì)讓這些屬性的處理失效。

          表單中最重要的是為每個(gè)輸入放置 name 屬性,后面會(huì)用到。

          我的非常簡(jiǎn)單的表單是這樣的:

          src/html/index.html

           <form class="form"> <input name='name' type="text" placeholder="Your name..." class="form__input" /> <input name='topic' type="text" placeholder="Topic..." class="form__input" /> <textarea name='message' type="text" placeholder="Your Message..." class="form__input" ></textarea>

          <input type="submit" value="send" class="form__input form__input--button"> </form>

          步驟2-注冊(cè)成為 email 用戶(hù)

          要配置你的電子郵件,你必須注冊(cè)電子郵件服務(wù)。別擔(dān)心—使用這個(gè)網(wǎng)站非常方便和省時(shí)。

          登入后,系統(tǒng)會(huì)詢(xún)問(wèn)你的電子郵件服務(wù),它位于個(gè)人電子郵件服務(wù)區(qū)(personal email service)。在我的例子中,我選擇了 gmail。

          然后,你需要連接你的 gmail 帳戶(hù)。這將用來(lái)發(fā)送電子郵件給你客戶(hù)。例如,如果你關(guān)聯(lián)了 xyz@gmail.com 賬戶(hù),你后續(xù)發(fā)送的郵件都將從這個(gè)郵箱發(fā)出。所以不要擔(dān)心“ Send email on your behalf” 這個(gè)授權(quán)信息—這正是你需要的!

          連接完 gmail 賬戶(hù)后,點(diǎn)擊添加服務(wù)(add service)按鈕。

          步驟3-創(chuàng)建郵件模板

          如果你已經(jīng)成功連接了你的 gmail 賬戶(hù),你現(xiàn)在應(yīng)該在信息中心中。現(xiàn)在需要?jiǎng)?chuàng)建電子郵件模板了。

          切換到電子郵件模板卡,并單擊創(chuàng)建一個(gè)新的模板(create a new template)。界面非常友好,所以創(chuàng)建模板不會(huì)有任何問(wèn)題。

          你可以選擇模板的名稱(chēng)和 ID。我稱(chēng)之為“我的神奇模板(my_amazing_template)”。

          接下來(lái),你必須指定郵件的內(nèi)容。

          模板的變量值來(lái)自 input 中的 `name` 屬性。你已將變量插入`{{{}}}`符號(hào)中。

          不要忘記在“收件人”部分 (右側(cè)) 添加電子郵件地址。你的電子郵件將被發(fā)送到該電子郵件地址上。截圖中的收件人郵箱是我自己的公司郵箱。

          這是我的簡(jiǎn)單模板,它使用來(lái)自 HTML 表單里的 3 個(gè)變量。我還指定了接收電子郵件的主題。

          步驟4-保存 API 密鑰

          這部分沒(méi)什么特別的。Emailjs 共享授權(quán) API 密鑰,將在發(fā)送電子郵件時(shí)使用。當(dāng)然,放這些鑰匙最好的地方是`.env` 配置。但是因?yàn)槲沂褂玫氖呛?jiǎn)單的靜態(tài)文件,我不想使用服務(wù)器配置,所以我將它們保存在 apikeys 文件中,然后再將它們導(dǎo)入。

          你的 USER_ID 位于 Account > API Keys 菜單下。

          TEMPLATE_ID 位于模板的標(biāo)題下面。

          這是我基于不存在的 keyssrc / js / apikeys. js 的示例配置.

          src/js/apikeys.js

          export default { USER_ID :'user_DPUd-rest-of-my-id', TEMPLATE_ID:'my_amazing_template'}

          如果需要將源碼發(fā)布到 GITHUB,不要忘記將 APIKEYS 文件添加到 .GITIGNORE文件中

          步驟5-發(fā)送電子郵件

          現(xiàn)在是該項(xiàng)目最后也是最重要的部分的了。現(xiàn)在我們必須使用 javascript 發(fā)送電子郵件。

          首先,你必須下載 emailjs 包。

          npm i emails-com

          然后,轉(zhuǎn)到 js 文件,導(dǎo)入庫(kù)和 apikeys。

          src/js/main.js

          import emailjs from 'emailjs-com'import apiKeys from './apikeys'

          現(xiàn)在是編寫(xiě)發(fā)送電子郵件功能的時(shí)候了

          src/js/main.js

          const sendEmail = e => { e.preventDefault

          emailjs .sendForm('gmail', apiKeys.TEMPLATE_ID, e.target, apiKeys.USER_ID) .then( result => { console.log(result.text) }, error => { console.log(error.text) } )}

          sendForm 函數(shù)有4個(gè)參數(shù):

          你的電子郵件的 ID,在這里:

          TEMPLATE_ID 來(lái)自 apikey 文件,

          事件對(duì)象來(lái)自你的表單提交

          USER_ID 來(lái)自 apikey 文件,

          最后,查找表單并添加提交事件監(jiān)聽(tīng)器:

          src/js/main.js

          const form = document.querySelector('.form')form.addEventListener('submit',sendEmail)

          正如我前面提到的,由于 `preventDefault` 函數(shù),屬性驗(yàn)證將無(wú)法工作。你必須使用 JS 自己進(jìn)行驗(yàn)證和清除輸入。

          以上就是全部?jī)?nèi)容,接下來(lái)讓我們測(cè)試一下。

          填寫(xiě)頁(yè)面上的表單并發(fā)送。

          我收到電子郵件,內(nèi)容正是根據(jù)我們的模板和表單數(shù)據(jù)渲染出來(lái)的。

          通過(guò)上圖可以看出,所有的變量的值都填充到了正確的位置上。

          總結(jié)

          通過(guò)本文的介紹你會(huì)發(fā)現(xiàn)用 JS 發(fā)送郵件并非難事。

          使用 emailjs,你可以簡(jiǎn)單的方式發(fā)送電子郵件。

          我相信你未來(lái)的用戶(hù)會(huì)很高興收到來(lái)自他們網(wǎng)頁(yè)上表單填寫(xiě)數(shù)據(jù)的t郵件,相信本文對(duì)你有幫助。

          這篇文章的配套代碼在這里: https://github.com/iwaniukooo11/email-sender

          原文鏈接:

          https://dev.to/iwaniukooo11/send-e-mails-directly-from-front-end-with-js-5d7d

          本文為CSDN翻譯文章,轉(zhuǎn)載請(qǐng)注明出處。

          ?我們想研發(fā)一個(gè)機(jī)器學(xué)習(xí)框架,6 個(gè)月后失敗了

          ?生產(chǎn)型機(jī)器學(xué)習(xí)已經(jīng)沒(méi)那么困難了?

          ?視頻 | 你不知道的"開(kāi)源"60年秘史

          ?GitHub標(biāo)星10,000+,Apache項(xiàng)目ShardingSphere的開(kāi)源之路

          ?阿里技術(shù)專(zhuān)家告訴你,如何畫(huà)出優(yōu)秀的架構(gòu)圖?

          ?加拿大API平臺(tái)如何做到30%為中國(guó)明星項(xiàng)目?創(chuàng)業(yè)老兵這樣說(shuō)……

          作一封郵件和制作web頁(yè)面還是有很大不同的。當(dāng)不同的瀏覽器都在不斷向標(biāo)準(zhǔn)靠近的同時(shí),大多數(shù)郵件客戶(hù)端卻止步不前,甚至有一些是在退步的。在2007年,Microsoft 將 Outlook 的渲染引擎從 IE 轉(zhuǎn)換成 Word的渲染方式,而一些基于web的郵件客戶(hù)端,像Gmail和Hotmail,則增加了一些怪異的模式,還有Lotus Notes的一些技巧。

          根據(jù)我的經(jīng)驗(yàn)來(lái)看,我們解決這些問(wèn)題的關(guān)鍵是要關(guān)注下面三件事情。首先,保持簡(jiǎn)單,你的郵件設(shè)計(jì)的越復(fù)雜,你的郵件在某個(gè)受歡迎的、不支持標(biāo)準(zhǔn)的客戶(hù)端上“抽風(fēng)”的可能性就越大。其次,你需要將你的編碼技巧退步十年,這通常意味著我們要使用嵌套的表格,將CSS寫(xiě)成內(nèi)聯(lián)的形式等。最后,你需要對(duì)你的設(shè)計(jì)進(jìn)行規(guī)律性的測(cè)試。

          使用表格布局

          因?yàn)橹T如Gmail和Outlook 2007 無(wú)法支持浮動(dòng)(float)、外邊距(margin)、內(nèi)填充(padding),你需要使用表格來(lái)作為你的郵件的框架。雖然表格嵌套的方法被廣泛支持,但是在對(duì)單元格的寬度、外邊距和內(nèi)填充的處理方法并不一致。為了達(dá)到最優(yōu)的效果,當(dāng)制作表格結(jié)構(gòu)時(shí),請(qǐng)記住下面的技巧。

          1、為每個(gè)單元格設(shè)置寬度,而不是表格

          當(dāng)你把表格寬度、td 寬度、td的填充和CSS的填充寫(xiě)到一封郵件時(shí),你看到的結(jié)果可能是每個(gè)郵件客戶(hù)端它們看上去都不一樣。最可靠的方法是我們將為表格的每個(gè)單元格(th,td)設(shè)置寬度,而不是表格(table)本身。如下:

          永遠(yuǎn)別指望郵件客戶(hù)端能夠計(jì)算出你沒(méi)有指定寬度的單元格的寬度。它絕對(duì)不會(huì)。同時(shí)也要避免使用基于百分比的寬度,像 Outlook 2007 這樣的客戶(hù)端從來(lái)不考慮這種寬度方式,特別是這些嵌套的表格。像素級(jí)視覺(jué),如果你想對(duì)每個(gè)單元格做填充,可以使用表單的單元格填屬性或者用CSS的內(nèi)填充,但是不要這兩種一起使用。

          2、嵌套迷思

          表格的嵌套相對(duì)于設(shè)置左右浮動(dòng)和外邊距(margin)或者表單單元格填充的方法更加穩(wěn)固。如果你能使用這種表格嵌套的方法達(dá)到相同的效果,這將會(huì)給你在那些蹩腳的(buggier)郵件終端上面獲得最好的結(jié)果。

          3、使用一個(gè)容器表單來(lái)設(shè)置 body 背景色彩

          很多郵件客戶(hù)端會(huì)忽略掉在CSS中或者<body>標(biāo)簽中設(shè)置的背景色。針對(duì)這種情況,將你的整封郵件用一個(gè)寬度為100%的表單包起來(lái),并且為其設(shè)置背景色。如下:

          你可以使用同樣的方案在背景圖片的設(shè)置上,需要記住的是某些郵件客戶(hù)端是不支持背景圖片的,這樣你就需要設(shè)置一個(gè)背景顏色作為備份方案。

          4、在單元格中避免使用多余的空格(whitespace)

          盡最大可能,避免<td>標(biāo)簽中出現(xiàn)空格。某些郵件客戶(hù)端(Yahoo!或者Hotmail)可能會(huì)在某些場(chǎng)景下,對(duì)單元格的上面或者下面增加額外的填充,把你的設(shè)計(jì)破壞掉。

          CSS 和基本的文字格式

          當(dāng)某些郵件設(shè)計(jì)師盡他們最大的努力去避免使用CSS時(shí),他們又會(huì)去依賴(lài)夢(mèng)魘般的<font>標(biāo)簽,但實(shí)際情況是很多的CSS屬性是被大部分郵件客戶(hù)端支持的。請(qǐng)查看下面的跨郵件終端的綜合CSS支持列表list of CSS support,從中你也能發(fā)現(xiàn)一些安全的屬性和一些應(yīng)該被避免使用的屬性。

          1、將css寫(xiě)成內(nèi)聯(lián)(inline)的樣式

          Gmail就是這方面的罪魁禍?zhǔn)住SS被從<head>和<body>中剝離,我們別無(wú)選擇的會(huì)將樣式寫(xiě)成內(nèi)聯(lián)的形式。一個(gè)好消息是你可以完全自動(dòng)化的完成轉(zhuǎn)化。像Premailer提供意見(jiàn)點(diǎn)擊的方式完成這一過(guò)程。我強(qiáng)烈建議你將此步驟作為你構(gòu)建活動(dòng)的最后一步,你就能感受到這個(gè)CSS的所有益處。

          2、避免使用字體的簡(jiǎn)寫(xiě)和十六進(jìn)制計(jì)數(shù)法

          一部分郵箱客戶(hù)端會(huì)放棄對(duì)簡(jiǎn)寫(xiě)的css字體屬性的解析。比如,絕對(duì)不要將你的字體樣式設(shè)置成下面的樣子。如下:

          相反,我們應(yīng)該寫(xiě)成下面的形式:

          談到字體這個(gè)話(huà)題,我最近也在不同的郵件客戶(hù)端測(cè)試引用字體(@font-face)。結(jié)果是凄涼的,這些瀏覽器安全的字體在郵件中使用還是遙遙無(wú)期。

          當(dāng)我們用CSS來(lái)聲明顏色屬性時(shí),有些郵件客戶(hù)端并不支持簡(jiǎn)寫(xiě)的16進(jìn)制的顏色值,比如 color:#f60; 我們需要將其補(bǔ)充完整 color:#ff6600;。為了達(dá)到最優(yōu)的效果,我們需要使用常規(guī)寫(xiě)法。

          段落

          像前面提到的單元格的間距,段落的間距也無(wú)法做到所有客戶(hù)端的一致。我看到過(guò)設(shè)計(jì)師使用兩個(gè)<br>或者用DIV寫(xiě)上內(nèi)聯(lián)(inline)的外邊距(margin)樣式彌補(bǔ)這個(gè)短板,但是我最近的測(cè)試顯示大多數(shù)情況下對(duì)段落的支持都還是比充足的(有一段時(shí)間 Yahoo! 根本不支持段落標(biāo)簽)。

          最好的實(shí)踐方法是對(duì)每個(gè)段落通過(guò)內(nèi)聯(lián)(inline)的方法設(shè)置外邊距(margin),像下面這樣:

          再次提示,在你構(gòu)建郵件的時(shí)候通過(guò)在head標(biāo)簽中增加樣式,然后通過(guò)Premailer將他們轉(zhuǎn)化成每個(gè)段落的內(nèi)聯(lián)樣式。

          如果你的設(shè)計(jì)對(duì)高度是很敏感的或者需要像素級(jí)別的完美,我強(qiáng)烈建議你不要將所有的段落寫(xiě)到一起,而是將文本的格式化工作放到表單的單元格中來(lái)做。你可能會(huì)需要使用到表單的嵌套或者單元格填充(cellpadding)/CSS 來(lái)達(dá)到期望的樣子。下面就是一個(gè)例子:

          鏈接

          某些郵件客戶(hù)端將會(huì)用他們的默認(rèn)樣式覆蓋你的鏈接色,你可以通過(guò)兩部來(lái)防止其發(fā)生。第一,針對(duì)每一個(gè)鏈接設(shè)置一個(gè)內(nèi)聯(lián)的(inline)的顏色:

          接下來(lái),增加一個(gè)冗余的 span 標(biāo)簽在 a 標(biāo)簽中。

          也許這些方案看上去比較過(guò)激,如果這個(gè)顏色對(duì)你的設(shè)計(jì)很重要,這個(gè)多余的 span 標(biāo)簽是你達(dá)到一致表現(xiàn)的最好解決方案。

          HTML郵件中的圖片

          很重要的一件需要牢記在心中的關(guān)于圖片的事情是你的訂閱者可能看不到你的圖片。如果你有這方面的準(zhǔn)備,你就會(huì)保持你的內(nèi)容簡(jiǎn)單,并且重要的內(nèi)容不通過(guò)圖片的形式來(lái)展示。

          在這個(gè)思想的指導(dǎo)下,在使用HTML郵件的過(guò)程中,下面有一些基本的要領(lǐng)需要牢記:

          1、避免占位圖片

          雖然使用占位圖片和嵌套表格的方式在10年前很流行,許多郵件客戶(hù)端已經(jīng)將其排除作為一種可靠的技術(shù)。很多客戶(hù)端會(huì)使用一個(gè)相同尺寸的空占位來(lái)替換圖片,另外一些會(huì)將所有的圖片移除。大多數(shù)郵件客戶(hù)端會(huì)給圖片賦予默認(rèn)的圖片區(qū)塊,這將導(dǎo)致訂閱者的第一感覺(jué)很差。堅(jiān)持將單元格賦予固定的寬度,讓其在沒(méi)有圖片的時(shí)候版式不會(huì)亂掉。

          2、將圖片定義尺寸

          如果你沒(méi)有給每個(gè)圖片設(shè)置尺寸,當(dāng)圖片沒(méi)有被下載時(shí),有些客戶(hù)端會(huì)自己發(fā)明一個(gè)他們自己的尺寸,你的版式就亂掉了。同時(shí),確保你的所有圖片在被用到郵件中前,都被賦予了正確的尺寸。某些客戶(hù)端會(huì)忽略你代碼中設(shè)置的尺寸,而去使用真實(shí)的圖片尺寸。

          3、避免使用 PNG 圖片

          Lotus Notes 6 和 7 并不支持 8位(8-bit)和24位(24-bit)的 PNG 圖片,所以需要使用GIF或者JPG格式的圖片,即使這會(huì)增加而外的圖片大小。

          4、為背景圖片提供備份的顏色

          Outlook 2007 不支持背景圖片(aside from this hack to get full page background images working)。如果你想在你的設(shè)計(jì)中使用背景圖像,提供一個(gè)背景色作為備份支持方案。這樣就能同時(shí)解決圖片被屏蔽和Outlook 2007的問(wèn)題。

          5、不要忘記標(biāo)注替代文本(alt text)

          缺少標(biāo)準(zhǔn)的支持意味著郵件客戶(hù)端對(duì)語(yǔ)義化和訪(fǎng)問(wèn)性良好的HTML郵件的破壞性是很大的。即使這樣,從圖片可能被屏蔽角度看,提供替代文本也是很重要的。這樣即使圖片在默認(rèn)狀態(tài)下被限制,大多數(shù)郵件客戶(hù)端也能顯示提供的文本來(lái)替代。另外還需要技術(shù)的是某些客戶(hù)端,比如 Outlook 2007, Hotmail 和 Apple Mail 在圖片被屏蔽的時(shí)候,并不提供替代文本(alt text).

          6、針對(duì) Hotmail 使用顯示hack

          令人費(fèi)解的是,Windows Live Hotmail 對(duì)每個(gè)圖片增加了幾個(gè)像素的填充。一個(gè)變通的方案就是使用下面的顯示屬性來(lái)解決這個(gè)問(wèn)題。

          這樣就能移除掉Hotmail的填充值,但是你也可能會(huì)給其它客戶(hù)端埋下隱患。

          7、避免使用浮動(dòng)屬性(float)

          Outlook 2007 和早期版本的 Notes 并不支持浮動(dòng)屬性(float)。在郵件中我們可以使用對(duì)齊屬性在針對(duì)圖像標(biāo)簽做到浮動(dòng)圖片的目的。

          如果你在 Yahoo!的郵件中發(fā)現(xiàn)圖片的怪異表現(xiàn),增加 align="top" 可能能夠解決你遇到的問(wèn)題。

          視頻郵件

          由于缺少 Javascript 或者其他對(duì)象標(biāo)簽(object tag)的支持,視頻郵件最大的程度就是gif動(dòng)畫(huà)(如果你認(rèn)為那是視頻的話(huà))。盡管如此,我最近做的一些關(guān)于用html5 videio 標(biāo)簽的測(cè)試結(jié)果,還是讓人感覺(jué)不錯(cuò)。

          HTML 5的標(biāo)簽?zāi)壳霸谝徊糠粥]件終端是無(wú)法運(yùn)行的,包括 Apple Mail,Entourage 2008, MobileMe 和 iPhone.作為如果視頻不被支持的補(bǔ)救方法,你可以提供穩(wěn)定的備選內(nèi)容,比如gif 動(dòng)畫(huà)或者一個(gè)可以點(diǎn)擊到瀏覽器播放視頻的圖片。

          當(dāng)然,你是否需要將視頻添加到你的郵件里面,那就是另外一個(gè)議題了,如果你的答案是肯定的,你可以使用這些代碼案例。

          關(guān)于移動(dòng)端郵件的那些事

          移動(dòng)端有機(jī)胺的情況近期顯得比較雜亂了,隨著iPhone,Android的發(fā)明和Palm和RIM的改進(jìn),認(rèn)為移動(dòng)端電子郵件終端不重要的年代一去不復(fù)返了。

          為了給移動(dòng)端訂閱用戶(hù)良好的體現(xiàn),我們?cè)诰幋a的過(guò)程中也有幾個(gè)關(guān)鍵點(diǎn)需要牢記心中。

          1、保持寬度小于600像素

          受限于郵件客戶(hù)端的視窗,這條規(guī)則來(lái)移動(dòng)視窗到來(lái)之前的年代就很重要。事實(shí)上,iphone 的視窗是320像素,Droid是480像素,Blackberry大概360像素。堅(jiān)持最大600像素寬的設(shè)計(jì),能夠讓你的郵件縮小到上面提到的設(shè)備上面依然可讀。這個(gè)尺寸在桌面端和web端的預(yù)覽效果也很好。

          2、注意文本尺寸的自動(dòng)調(diào)整

          作為一個(gè)好的特性,基于webkit郵件客戶(hù)端(比如 iPhone, Pre 和 Android) 能夠自動(dòng)調(diào)整文本的大小來(lái)提高閱讀性。如果你的測(cè)試結(jié)果表明這項(xiàng)特點(diǎn)給你帶來(lái)的好處是破外了你的設(shè)計(jì),你可以通過(guò)下面的屬性禁用:

          不要忘記去測(cè)試

          雖然近幾年郵件客戶(hù)端對(duì)標(biāo)準(zhǔn)的支持并沒(méi)有取得長(zhǎng)足的進(jìn)步,但是某些郵件客戶(hù)端的改變卻從未停止(有好有壞),基于 web 的客戶(hù)端,如 Yahoo!、hotmail 和 Gmail 在這方面乏善可陳。我看到過(guò)無(wú)數(shù)次可行的設(shè)計(jì)方案被停止支持,沒(méi)有任何解釋。

          基于這個(gè)原因,你也要對(duì)你的郵件設(shè)計(jì)保持規(guī)律的測(cè)試。我發(fā)現(xiàn)每個(gè)月進(jìn)行一些快速的測(cè)試的小技巧,特別基于web的客戶(hù)端。好的消息是經(jīng)過(guò)幾次設(shè)計(jì)和測(cè)試,你將會(huì)從這些雜亂無(wú)章中找到規(guī)律。一些潛在的陷阱將變的可以預(yù)計(jì),一個(gè)對(duì)郵箱友好的設(shè)計(jì)模型也會(huì)在你心中成型。


          本文參考“新浪UED”:創(chuàng)建堅(jiān)如磐石的HTML郵件

          親愛(ài)的讀者,我們已經(jīng)成功地發(fā)送了簡(jiǎn)單的文本郵件。但在實(shí)際應(yīng)用中,我們可能還需要發(fā)送格式更加豐富的HTML郵件,或者包含附件的郵件。今天,我們就來(lái)探索如何使用Python來(lái)構(gòu)建并發(fā)送這樣的郵件。

          一、發(fā)送HTML郵件

          HTML郵件可以讓你的郵件內(nèi)容更加豐富多彩,包含圖片、鏈接、樣式等。在Python中,我們同樣可以使用email模塊來(lái)構(gòu)建HTML郵件。

          from email.mime.multipart import MIMEMultipart
          from email.mime.text import MIMEText
          
          # HTML郵件正文內(nèi)容
          html_content = """
          <html>
          <head></head>
          <body>
              <h1>Hello, this is an HTML email from Python!</h1>
              <p>Here's a <a href="https://www.python.org">link to Python's website</a>.</p>
              <img src="cid:image1">  <!-- 注意:這里使用了cid引用,稍后我們將添加圖片附件 -->
          </body>
          </html>
          """
          
          # 創(chuàng)建一個(gè)多部分郵件對(duì)象
          msg = MIMEMultipart('related')
          msg['From'] = 'your_email@gmail.com'
          msg['To'] = 'receiver_email@example.com'
          msg['Subject'] = 'HTML Email with Python'
          
          # 添加HTML郵件正文
          msg_alternative = MIMEMultipart('alternative')
          msg.attach(msg_alternative)
          html_part = MIMEText(html_content, 'html', 'utf-8')
          msg_alternative.attach(html_part)
          
          # (可選)添加圖片附件(這里僅為示例,實(shí)際發(fā)送時(shí)請(qǐng)確保圖片文件存在)
          # 注意:由于示例中HTML中引用了圖片,我們需要在郵件中添加這個(gè)圖片作為附件,并使用cid引用
          # 這里為了簡(jiǎn)化,我們略過(guò)實(shí)際文件讀取和添加的過(guò)程,僅展示邏輯
          # ... 添加圖片附件的代碼會(huì)涉及到打開(kāi)文件、讀取內(nèi)容、創(chuàng)建MIMEImage對(duì)象,并設(shè)置Content-ID為"image1"
          
          # 發(fā)送郵件(假設(shè)SMTP連接和登錄已經(jīng)完成)
          # ... 使用smtplib發(fā)送msg對(duì)象,與之前的示例類(lèi)似

          注意:上面的代碼示例中,關(guān)于添加圖片附件的部分被省略了,因?yàn)樗婕暗轿募蘒/O操作和MIMEImage對(duì)象的使用,這可能會(huì)讓示例變得復(fù)雜。在實(shí)際應(yīng)用中,你需要讀取圖片文件,創(chuàng)建MIMEImage對(duì)象,并將其附加到郵件中,同時(shí)確保HTML中的<img>標(biāo)簽通過(guò)cid屬性正確引用該圖片。

          二、發(fā)送帶附件的郵件

          發(fā)送帶附件的郵件與發(fā)送HTML郵件類(lèi)似,但你需要?jiǎng)?chuàng)建一個(gè)多部分郵件(MIMEMultipart),并為每個(gè)部分(文本、HTML、附件等)設(shè)置不同的MIME類(lèi)型。

          from email.mime.base import MIMEBase
          from email import encoders
          
          # 假設(shè)我們要發(fā)送一個(gè)名為"example.txt"的文本文件作為附件
          filename = 'example.txt'
          
          # 讀取文件內(nèi)容并編碼為base64
          with open(filename, 'rb') as attachment:
              part = MIMEBase('application', 'octet-stream')
              part.set_payload((attachment).read())
          encoders.encode_base64(part)
          
          # 添加文件頭信息
          part.add_header('Content-Disposition', "attachment; filename= %s" % filename)
          
          # 將附件添加到郵件中
          msg.attach(part)
          
          # 現(xiàn)在,msg對(duì)象包含了文本(或HTML)和附件,你可以使用smtplib發(fā)送它
          # ... 發(fā)送郵件的代碼與之前相同

          結(jié)語(yǔ)

          恭喜你,現(xiàn)在你已經(jīng)掌握了使用Python發(fā)送文本郵件、HTML郵件以及帶附件郵件的技能!這些技能將幫助你在自動(dòng)化任務(wù)、通知系統(tǒng)或任何需要郵件通信的應(yīng)用程序中大展拳腳。記得在實(shí)踐中不斷探索和嘗試,你會(huì)發(fā)現(xiàn)Python在郵件處理方面的更多可能性。


          主站蜘蛛池模板: 亚洲高清偷拍一区二区三区| 国产精品高清视亚洲一区二区| av无码一区二区三区| 欧洲精品码一区二区三区| 国产一区二区久久久| 亚洲福利电影一区二区?| 亚洲无删减国产精品一区| 中文字幕aⅴ人妻一区二区 | 日韩精品一区二区三区老鸭窝| 国产a∨精品一区二区三区不卡| 插我一区二区在线观看| 日韩制服国产精品一区| 日韩免费视频一区二区| 一区二区三区精品| 亚洲视频一区二区三区四区| 在线欧美精品一区二区三区| 亚洲av色香蕉一区二区三区| 国产精品一区二区毛卡片| 女人18毛片a级毛片一区二区| 国产精品一区二区AV麻豆| 国产伦精品一区三区视频| A国产一区二区免费入口 | 国产成人一区二区三区在线观看| 亚洲无线码在线一区观看| 91在线一区二区| 日韩精品一区二区三区老鸦窝| 国产女人乱人伦精品一区二区 | 久久精品国产一区二区三区不卡 | 日韩伦理一区二区| 影院无码人妻精品一区二区| 国产一区二区三区免费观看在线 | 精品一区精品二区制服| 好爽毛片一区二区三区四无码三飞| 大香伊蕉日本一区二区| 激情内射亚州一区二区三区爱妻| 久久国产精品亚洲一区二区| 亚洲国产系列一区二区三区 | 国产不卡视频一区二区三区| 久久久国产精品一区二区18禁 | 国精产品一区一区三区| 亚洲高清日韩精品第一区|