Dieser Artikel stellt hauptsächlich die Methode zur Verwendung von node.js zum Senden von E-Mails basierend auf 1 Node.js-Methode zum Senden von E-Mails basierend auf dem STMP-Protokoll Wenn es um die Verwendung von node.js zum Senden von E-Mails geht, wird grundsätzlich das bekannte /** * Verwenden Sie Nodemailer, um STMP-E-Mails zu senden. * @param {Object} wählt die Konfiguration zum Senden von E-Mails aus. * @param {Object} smtpCfg SMTP-Serverkonfiguration */ asynchrone Funktion sendMail(opts, smtpCfg) { const resultInfo = { code: 0, msg: '', result: null }; wenn (!smtpCfg) { resultInfo.msg = „Informationen zum Senden von E-Mails sind nicht konfiguriert“; ErgebnisInfo.code = -1009; Ergebnisinfo zurückgeben; } // Ein Mail-Objekt erstellen const mailOpts = Object.assign( { // Absender von: `Benachrichtigen <${smtpCfg.auth.user}>`, // Betreff: 'Benachrichtigen', // Text: opts.content, //html: opts.inhalt, // Inhalt des Anhangs // /*attachments: [{ // Dateiname: 'data1.json', // Pfad: Pfad.resolve(__dirname, 'data1.json') // }, { // Dateiname: 'pic01.jpg', // Pfad: Pfad.auflösen(__dirname, 'pic01.jpg') // }, { // Dateiname: 'test.txt', // Pfad: Pfad.auflösen(__dirname, 'test.txt') // }],*/ }, Optionen ); wenn (!mailOpts.to) mailOpts.to = []; wenn (!Array.isArray(mailOpts.to)) mailOpts.to = String(mailOpts.to).split(','); mailOpts.to = mailOpts.to.map(m => String(m).trim()).filter(m => m.includes('@')); wenn (!mailOpts.to.length) { resultInfo.msg = „Der E-Mail-Empfänger ist nicht konfiguriert“; resultInfo.code = -1010; Ergebnisinfo zurückgeben; } const mailToList = mailOpts.to; const transporter = nodemailer.createTransport(smtpCfg); // an Liste, die separat gesendet werden soll (const to of mailToList) { mailOpts.to = to.trim(); versuchen { const info = warte auf transporter.sendMail(mailOpts); console.log('Mail gesendet an:', mailOpts.to, 'Antwort:', info.response); resultInfo.msg = info.antwort; } Fehler abfangen { konsole.log(Fehler); ErgebnisInfo.code = -1001; resultInfo.msg = Fehler; } } Ergebnisinfo zurückgeben; } Verwenden Sie die Methode sendMail, um E-Mails zu senden: Konstantenoptionen = { Betreff: 'Thema für Test', /** E-Mail-Inhalt im HTML-Format*/ html: `E-Mail-Inhalt für Test: <a href="https://lzw.me" rel="external nofollow" rel="external nofollow" >https://lzw.me</a>`, /** TEXT E-Mail-Inhalt im Textformat*/ text: '', an: '[email protected]', //Anhangsliste//attachments: [], }; const smtpConfig = { Host: „smtp.qq.com“, //QQ: smtp.qq.com; NetEase: smtp.163.com Port: 465, //Portnummer. QQ-Postfach 465, NetEase-Postfach 25 sicher: wahr, Autorisierung: Benutzer: '[email protected]', //E-Mail-Kontokennwort: '', //E-Mail-Autorisierungscode}, }; sendMail(opts, smtpConfig).then(Ergebnis => console.log(Ergebnis)); 2 Node.js-Methode zum Senden von E-Mails basierend auf dem MS Exchange-MailserverFür E-Mail-Dienste, die mit dem Microsoft Exchange Server von Microsoft erstellt wurden, ist Nodemailer machtlos. Exchange Web Service (EWS) bietet eine Schnittstelle für den Zugriff auf Exchange-Ressourcen. In der offiziellen Dokumentation von Microsoft finden Sie ein ausführliches Dokument mit Schnittstellendefinitionen. Zu den beliebten Drittanbieterbibliotheken für Exchange-Maildienste gehören node-ews und ews-javascript-api. 2.1 Senden von MS Exchange-E-Mails mit node-ewsIm Folgenden wird am Beispiel des Moduls node-ews das Versenden von E-Mails mit dem Exchange-Maildienst vorgestellt. 2.1.1 Kapseln Sie eine Methode zum Senden von E-Mails basierend auf Node-EWSKapseln Sie eine sendMailByNodeEws-Methode ein: EWS von „node-ews“ importieren; Schnittstelle IEwsSendOptions exportieren { Autorisierung: Benutzer: Zeichenfolge; Pass?: Zeichenfolge; /** Der verschlüsselte Kennwortschlüssel (NTLMAuth.nt_password). Wenn es sich um einen String handelt, sollte es das Ergebnis der Hex-Kodierung sein*/ nt_password?: Zeichenfolge | Puffer; /** Mit Passwort verschlüsselter Schlüssel (NTLMAuth.lm_password). Wenn es sich um einen String handelt, sollte es das Ergebnis der Hex-Kodierung sein*/ lm_password?: Zeichenfolge | Puffer; }; /**Adresse austauschen*/ Host?: Zeichenfolge; /** E-Mail-Betreff */ Betreff?: Zeichenfolge; /** E-Mail-Inhalt im HTML-Format*/ html?: Zeichenfolge; /** TEXT – Inhalt des E-Mail-Textkörpers im Textformat (niedrigere Priorität als HTML-Parameter) */ Text?: Zeichenfolge; zu?: Zeichenfolge; } /** * E-Mail über Exchange (EWS) senden*/ exportiere asynchrone Funktion sendMailByNodeEws(Optionen: IEwsSendOptions) { const resultInfo = { code: 0, msg: '', result: null }; if (!Optionen) { ErgebnisInfo.code = -1001; resultInfo.msg = „Optionen dürfen nicht null sein“; } sonst wenn (!options.auth) { ErgebnisInfo.code = -1002; resultInfo.msg = 'Options.auth{user,pass} darf nicht null sein'; } sonst wenn (!options.auth.user || (!options.auth.pass && !options.auth.lm_password)) { ErgebnisInfo.code = -1003; resultInfo.msg = „Options.auth.user oder Options.auth.password dürfen nicht null sein“; } wenn (ErgebnisInfo.Code) ErgebnisInfo zurückgeben; const ewsConfig = { Benutzername: options.auth.user, Passwort: options.auth.pass, nt_password: Optionen.auth.nt_password, lm_password: Optionen.auth.lm_password, Host: Optionen.Host, // Authentifizierung: "basic", }; wenn (ewsConfig.nt_password && Typ von ewsConfig.nt_password === 'Zeichenfolge') { ewsConfig.nt_password = Puffer.from(ewsConfig.nt_password, 'hex'); } wenn (ewsConfig.lm_password && Typ von ewsConfig.lm_password === 'Zeichenfolge') { ewsConfig.lm_password = Puffer.from(ewsConfig.lm_password, 'hex'); } Objekt.Schlüssel(ewsConfig).forEach(Schlüssel => { wenn (!ewsConfig[Schlüssel]) lösche ewsConfig[Schlüssel]; }); // node-ews initialisieren const ews = new EWS(ewsConfig); // EWS-API-Funktion definieren const ewsFunction = "Erstellen eines Elements"; // Argumente der EWS-API-Funktion definieren const ewsArgs = { Attribute: MessageDisposition: 'SendenUndSpeichernKopie', }, GespeicherteItemFolderId: { DistinguishedFolderId: { Attribute: ID: 'sentitems', }, }, }, Artikel: { Nachricht: { Artikelklasse: 'IPM.Note', Betreff: options.subject, Körper: { Attribute: BodyType: options.html ? 'HTML' : 'Text', }, $Wert: Optionen.html || Optionen.text, }, An Empfänger: { Postfach: E-Mail-Adresse: options.to, }, }, IsRead: 'false', }, }, }; versuchen { const Ergebnis = warte auf ews.run(ewsFunction, ewsArgs); // console.log('Mail gesendet an:', options.to, 'Antwort:', Ergebnis); resultInfo.result = Ergebnis; wenn (Ergebnis.ResponseMessages.MessageText) resultInfo.msg = Ergebnis.ResponseMessages.MessageText; } fangen (Fehler) { Konsole.log(Fehlerstapel); ErgebnisInfo.code = 1001; resultInfo.msg = Fehlerstapel; } Ergebnisinfo zurückgeben; } Verwenden Sie die Methode sendMailByNodeEws, um E-Mails zu senden: sendMailByNodeEws({ Autorisierung: Benutzer: '[email protected]', Pass: '123456', /** Der verschlüsselte Kennwortschlüssel (NTLMAuth.nt_password). Wenn es sich um einen String handelt, sollte es das Ergebnis der Hex-Kodierung sein*/ nt_password: '', /** Mit Passwort verschlüsselter Schlüssel (NTLMAuth.lm_password). Wenn es sich um einen String handelt, sollte es das Ergebnis der Hex-Kodierung sein*/ lm_password: '', }, /**Adresse austauschen*/ Host: 'https://ews.xxx.com', /** E-Mail-Betreff */ Betreff: 'Thema für Test', /** E-Mail-Inhalt im HTML-Format*/ html: `E-Mail-Inhalt für Test: <a href="https://lzw.me" rel="external nofollow" rel="external nofollow" >https://lzw.me</a>`, /** TEXT – Inhalt des E-Mail-Textkörpers im Textformat (niedrigere Priorität als HTML-Parameter) */ text: '', an: '[email protected]', }) 2.1.2 Authentifizierungskonfiguration basierend auf NTLMAuthDie direkte Konfiguration des Pass-Passworts kann zur Offenlegung des Klartext-Passworts führen. Wir können das Pass-Feld leer lassen, die Felder nt_password und lm_password konfigurieren und den NTLMAuth-Authentifizierungsmodus verwenden. Diese beiden Felder werden basierend auf dem übergebenen Klartext generiert. Die NodeJS-Generierungsmethode kann mithilfe des httpntlm-Moduls vervollständigt werden. Die spezifische Referenz lautet wie folgt: importiere { ntlm als NTLMAuth } von 'httpntlm'; /** Konvertieren Sie das eingegebene E-Mail-Kontokennwort in das NTLMAuth-Schlüsselformat (Hex) und geben Sie es aus*/ const getHashedPwd = () => { const passwordPlainText = process.argv.slice(2)[0]; wenn (!passwordPlainText) { console.log('VERWENDUNG: \n\tnode get-hashed-pwd.js [Passwort]'); zurückkehren; } const nt_password = NTLMAuth.create_NT_hashed_password(passwordPlainText.trim()); const lm_password = NTLMAuth.create_LM_hashed_password(passwordPlainText.trim()); // console.log('\n Passwort:', passwordPlainText); console.log(`nt_password:`, nt_password.toString('hex')); console.log(`lm_password:`, lm_password.toString('hex')); zurückkehren { nt_password, lm_password, }; }; getHashedPwd(); 2.2 Senden von MS Exchange-E-Mails mithilfe der ews-javascript-apiIm offiziellen Wiki gibt es entsprechende Beispiele zum Senden von E-Mails per ews-javascript-api. Allerdings ist mir der Testvorgang nicht gelungen, und zwar, weil ich keine Serverauthentifizierung erhalten und den genauen Grund nicht überprüfen konnte. Der folgende Code dient daher nur als Referenz: /** * Verwenden Sie `ews-javascript-api` um (MS Exchange) E-Mails zu senden */ exportiere asynchrone Funktion sendMailByEwsJApi(Optionen: IEwsSendOptions) { const resultInfo = { code: 0, msg: '', result: null }; if (!Optionen) { ErgebnisInfo.code = -1001; resultInfo.msg = „Optionen dürfen nicht null sein“; } sonst wenn (!options.auth) { ErgebnisInfo.code = -1002; resultInfo.msg = 'Options.auth{user,pass} darf nicht null sein'; } sonst wenn (!options.auth.user || (!options.auth.pass && !options.auth.lm_password)) { ErgebnisInfo.code = -1003; resultInfo.msg = „Options.auth.user oder Options.auth.password dürfen nicht null sein“; } const ews = erfordern('ews-javascript-api'); const exch = neuer ews.ExchangeService(ews.ExchangeVersion.Exchange2010); exch.Credentials = neue ews.WebCredentials(Optionen.auth.user, Optionen.auth.pass); exch.Url = neuer ews.Uri(Optionen.Host); ews.EwsLogging.DebugLogEnabled = true; // false, um das Debuggen auszuschalten. const msgattach = neue ews.EmailMessage(exch); msgattach.Subject = Optionen.Subject; msgattach.Body = neuer ews.MessageBody(ews.BodyType.HTML, escape(optionen.html || optionen.text)); wenn (!Array.isArray(options.to)) options.to = [options.to]; Optionen.zu.fürEach(zu => msgattach.ToRecipients.Add(zu)); // msgattach.Importance = ews.Importance.High; // Anhang senden // msgattach.Attachments.AddFileAttachment('anzuhängender Dateiname.txt', 'c29tZSB0ZXh0'); versuchen { const Ergebnis = warte auf msgattach.SendAndSaveCopy(); // .Send(); console.log('FERTIG!', Ergebnis); resultInfo.result = Ergebnis; } fangen (Fehler) { console.log('FEHLER:', err); ErgebnisInfo.code = 1001; resultInfo.msg = Fehler; } Ergebnisinfo zurückgeben; } 3 Erweiterte Referenz nodemailer.com/über/ Oben sind die Details zum Senden von E-Mails durch node.js basierend auf dem STMP-Protokoll und dem EWS-Protokoll aufgeführt. Weitere Informationen zum Senden von E-Mails durch node.js finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM! Das könnte Sie auch interessieren:
|
<<: MySql-Anmeldekennwort vergessen und Lösung für vergessenes Kennwort
>>: Kompilieren Sie CPP-Dateien mit G++ in Ubuntu
Über Verbindungen lassen sich faktische Fremdschl...
Seit Zabbix Version 3.0 wird verschlüsselte Kommu...
Problem: Die MySQL-Datenbank ist unerwartet abges...
Vorwort In MySQL verwenden sowohl Innodb als auch...
Inhaltsverzeichnis 1. Einführung in das Docker-Ma...
Erstellen Sie ein einfaches Spring Boot-Webprojek...
Da ich MySQL schon so lange verwende, glaube ich,...
Wenn wir eine automatische Erkennung durchführen,...
In diesem Artikelbeispiel wird der spezifische Co...
In MySQL verwenden wir normalerweise ein Limit, u...
Die erste Zeile eines Docker-Images beginnt mit e...
1. Phänomen Am frühen Morgen wurde einer Online-T...
Inhaltsverzeichnis 1. Erste SQL-Vorbereitung 2. M...
Beim Entwerfen eines H5-Layouts werden Sie normal...
Vorwort: Weil viele Geschäftstabellen Entwurfsmus...