日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

express-14 发送邮件

發布時間:2025/6/17 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 express-14 发送邮件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

簡介

Node和Express都沒有內置的郵件發送功能,所以必須使用第三方模塊。推薦Andris Reinman的Nodemailer

SMTP、MSA和MTA

  • 發送郵件的通用語言是簡單郵件傳輸協議(SMTP)

  • 盡管用SMTP直接發送一封郵件給接收者的郵件服務器是有可能的,但這通常是個非常糟糕的主意。除非是像Google或Yahoo!那樣的“值得信任的發送者”,否則郵件很可能會直接被扔進垃圾箱。

  • 用郵件提交代理(MSA)比較好,它會通過可信的渠道投遞郵件,降低郵件被標記為垃圾郵件的可能性。

  • 除了確保郵件成功送達,MSA還處理諸如臨時故障造成的滋擾和退回的郵件。

  • 郵件傳輸代理(MTA),它提供將郵件真正送到其最終目的地的服務。

  • 像Gmail、Hotmail、iCloud這樣的MSA是有郵件限制的;一旦準備好進入生產環境,可以切換到Sendgrid或亞馬遜簡單Email服務(SES)之類的專業MSA。

郵件頭

  • 郵件消息由兩部分組成:頭部和主體。

  • 頭部包含與郵件有關的信息:誰發的、發給誰、接收日期、主題等; 頭信息給了所有關于郵件如何到達你這里的信息,郵件經過的所有服務器和MTA都會在頭部里列出來。

  • “from”地址,它可以由發送方任意設定。當指定的“from”地址不是發送郵件的賬號時,經常被當作“欺詐”; 不是在建議你嘗試這種行為。

  • 然而發送的郵件必須有“from”地址。有時這在發送自動郵件時會出現問題,因此經常會出現像“不要回復do-not-reply@meadowlarktravel.com”之類的返回地址。不管是想采取這種方式,還是將發送地址設為“草地鷚旅行社 info@meadowlarktravel.com”,都完全取決于你。不過如果你采用了后一種方式,就要準備好答復發給info@meadowlarktravel.com的郵件。

郵件格式

  • 互聯網剛出現的時候,所有郵件都是簡單的ASCII文本。

  • Nodemailer可以處理

  • 郵件既可以是普通文本(Unicode),也可以是HTML; 建議總是包含文本和HTML兩種格式的郵件;

  • 幾乎所有現代的郵件程序都支持HTML郵件,所以用HTML作為郵件格式一般相當安全。

Nodemailer

//簡單例子 var nodemailer = require('nodemailer');var transporter = nodemailer.createTransport({service: 'Gmail',auth: {user: credentials.gmail.user,pass: credentials.gmail.password} });var mailOptions = {from: 'Fred Foo <foo@blurdybloop.com>', // sender address to: 'one@gmail.com ,tow@gmail.com', // list of receivers subject: 'Hello ', // Subject line text: 'Hello world ', // plaintext body html: '<b>Hello world </b>' // html body }; transporter.sendMail(mailOptions, function(error, info){if(error){console.log(error);}else{console.log('Message sent: ' + info.response);}});

Nodemailer為大多數流行的郵件服務提供了快捷方式:Gmail、Hotmail、iCloud、Yahoo!,除此之外還有很多。如果你的MSA沒有出現在這個列表上,或者你需要直接連接一個SMTP服務器,它也支持:

var mailTransport = nodemailer.createTransport('SMTP',{ host: 'smtp.meadowlarktravel.com', secureConnection: true, //用SSL 端口: 465auth: {user: credentials.meadowlarkSmtp.user,pass: credentials.meadowlarkSmtp.password,} });

發送郵件

  • 在這里處理了錯誤,但沒有錯誤不一定表示郵件成功發給了接收者:只有在跟MSA通信出現問題時才會設置回調函數的err參數(比如網絡或授權錯誤)。如果MSA不能投遞郵件(比如因為無效的郵件地址或者未知的用戶),你會收到一封投遞給MSA賬號的失敗郵件(比如你用自己的個人Gmail作為MSA,你的Gmail收件箱中就會收到一封失敗消息)。

  • 如果你需要系統自動判斷郵件是否投遞成功,有兩個選擇。一是使用支持錯誤報告的MSA。亞馬遜的簡單郵件服務(SES)就是這樣的服務,并且郵件退信通知是通過他們的簡單通知服務(SNS)發送的,你可以配置其調用運行在你網站上的Web服務。另一個選擇是使用直接投遞,跳過MSA。不推薦使用直接投遞,因為它是一個復雜的方案,并且你的郵件很可能會被標記為垃圾郵件。

將郵件發送給多個接收者

在向多個接收者發送郵件時,必須注意觀察MSA的限制。比如Gmail,每封郵件的接收者上限是100個。如果發送批量郵件,可能要發送多條消息,每條消息有多個接收者:

var recipientLimit = 100; for(var i=0; i<largeRecipientList.length/recipientLimit; i++){mailTransport.sendMail({from: '"Meadowlark Travel" <info@meadowlarktravel.com>',to: largeRecipientList.slice(i*recipientLimit, i*(recipientLimit+1)).join(','),subject: 'Special price on Hood River travel package!',text: 'Book your trip to scenic Hood River now!',}, function(err){if(err) console.error( 'Unable to send email: ' + error );});}

發送批量郵件的更佳選擇

盡管確實可以通過Nodemailer和恰當的MSA發送批量郵件,但在這樣做之前你應該細心考慮。一個負責任的郵件營銷必須提供一種退訂營銷郵件的辦法,并且這不是個輕而易舉的任務。還要乘以你維護的每個訂閱列表。像MailChimp和Campaign Monitor之類的服務提供了你需要的一切,包括監測郵件營銷成功情況的優秀工具.

發送HTML郵件

Nodemailer允許你在同一封郵件里發送HTML和普通文本兩種版本,讓郵件客戶端選擇顯示哪個版本(一般是HTML):

mailTransport.sendMail({from: '"Meadowlark Travel" <info@meadowlarktravel.com>',to: 'joecustomer@gmail.com, "Jane Customer" ' +'<janecustomer@gyahoo.com>, frecsutomer@hotmail.com',subject: 'Your Meadowlark Travel Tour',html: '<h1>Meadowlark Travel</h1>\n<p>Thanks for book your trip with ' +'Meadowlark Travel. <b>We look forward to your visit!</b>',generateTextFromHtml: true, //使用 }, function(err){if(err) console.error( 'Unable to send email: ' + error ); });

HTML郵件中的圖片

  • 盡管可以在HTML郵件中嵌入圖片,但強烈反對這樣做,因為它們會使你的郵件變得臃腫,并且一般會被當成不好的做法。相反,應該把用在郵件中的圖片放在Web服務器上,并在郵件中放入正確的鏈接。

  • 當發送郵件給其他人時,很明顯不應該用localhost; 根據所用的郵件客戶端,或許可以在你的郵件中用localhost來進行測試,但在你的機器之外是行不通的。

封裝郵件功能

//lib/email.jsvar nodemailer = require('nodemailer');module.exports = function(credentials){var mailTransport = nodemailer.createTransport({service: 'Gmail',auth: {user: credentials.gmail.user,pass: credentials.gmail.password,} });var from = '"example" <example@example.com>';var errorRecipient = credentials.gmail.user;return {send: function(to, subj, body){mailTransport.sendMail({from: from,to: to,subject: subj,html: body, generateTextFromHtml: true}, function(err, info){if(err) {console.error('Unable to send email: ' + err);} else {console.log('Message sent: ' + info.response);}}); },emailError: function(message, filename, exception){var body = '<h1>Meadowlark Travel Site Error</h1>' +'message:<br><pre>' + message + '</pre><br>'; if(exception) body += 'exception:<br><pre>' + exception+ '</pre><br>';if(filename) body += 'filename:<br><pre>' + filename+ '</pre><br>';mailTransport.sendMail({from: from,to: errorRecipient,subject: 'Meadowlark Travel Site Error', html: body,generateTextFromHtml: true}, function(err){if(err) console.error('Unable to send email: ' + err);}); },} };//發送調用 var emailService = require('./lib/email.js')(credentials);emailService.send('joecustomer@gmail.com', 'Hood River tours on sale today!','Get \'em while they\'re hot!');

將郵件作為網站監測工具

if(err){email.sendError('the widget broke down!', __filename); // ……給用戶顯示錯誤消息 }// 或者try {// 在這里做些不確定的事情...... } catch(ex) {email.sendError('the widget broke down!', __filename, ex); // ……給用戶顯示錯誤消息 }

轉載于:https://www.cnblogs.com/jinkspeng/p/4350493.html

總結

以上是生活随笔為你收集整理的express-14 发送邮件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。