【问题标题】:sending mail with nodemailer使用 nodemailer 发送邮件
【发布时间】:2017-12-06 17:28:35
【问题描述】:

每当我运行代码时,我都会收到错误“错误:在 SMTPConnection._formatError 处从未收到问候语....”

function automatedMailSender(req,res){

var mailOptions = {
    from: "abc <abc@test.com>", // sender address
    to: 'nit@test.com', // list of receivers
    subject: 'Hello ', // Subject line
    text: 'Hello world ?', // plain text body
    html: '<b>Hello world ?</b>' // html body
 };


var mailer=nodemailer.createTransport({
    host: 'mail.test.com',
    port: 465,
    secure: false, // secure:true for port 465, secure:false for port 587
    auth: {
        user: 'mymail@test.com',
        pass: '1234'
    }
});

mailer.sendMail(mailOptions, (error, response)=>{
    if(error){
        console.log('mail not sent \n',error);
    }
    else{
        console.log("Message sent: " ,response.message);
    }   
 });
}

我在代码中做错了什么。

【问题讨论】:

  • 请发布完整的错误。

标签: node.js smtp nodemailer


【解决方案1】:

答案就在您的代码中

port: 465,
secure: false, // secure:true for port 465, secure:false for port 587

对于端口 465,“安全”的值应该为真

【讨论】:

    【解决方案2】:

    这是由于您的 SMTP 对未经授权的用户的安全性,所以为了克服这个问题,您需要设置 rejectUnauthorized:false

    希望对您有所帮助。

    【讨论】:

      【解决方案3】:

      如果您使用 Gmail 发送邮件,那么试试这个。

      Allow less secure apps to connect to Gmail.

      【讨论】:

        【解决方案4】:

        尝试类似的方法,它对我来说非常有用:

        //Create reusable transporter object using the default SMTP transport 
        var transporter = nodemailer.createTransport(
        'smtps://USERNAME%40gmail.com:PASSWORD@smtp.gmail.com');
        
        // setup e-mail data 
        var mailOptions = {
                from: '"Michel ?" <recipe@example.com>', // sender address 
                to: 'bernard@example.com', // list of receivers 
                subject: 'Hello', // Subject line 
                text: 'Bonjour!' // plaintext body 
              };
        
        // send mail with defined transport object
        
        transporter.sendMail(mailOptions, function(error, info){
              if(error){
                return console.log(error);
              }
              console.log('Message sent: ' + info.response);
        });
        

        如果还是不行,你有一点教程here

        【讨论】:

          【解决方案5】:
          var mailer=nodemailer.createTransport({
              host: 'mail.test.com',
              port: 465,
              secure: true, // secure:true for port 465, secure:false for port 587
              transportMethod: 'SMTP',
              auth: {
                  user: 'mymail@test.com',
                  pass: '1234'
              }
          });
          

          secure 的值对于端口465 应该为真,并使用transportMethod: 'SMTP'

          【讨论】:

          • 请解释更多
          • 对于端口 465,“secure”的值应该为真,并使用 transportMethod: 'SMTP'
          【解决方案6】:
          tls:{
                  rejectUnauthorized:false
              }
          

          通过在邮件变量中使用上面的代码来修复它。 谢谢大家

          【讨论】:

            【解决方案7】:
            const express = require('express');
            const router = express.Router();
            const { Email } = require('../models/email.model');
            const { User } = require('../models/user.model');
            const nodemailer = require('nodemailer');
            
            
            
            
            //post email 
            router.post('/send', async (req, res) => {
            
                if (req.query) {
                    var query = {}
                    if (req.query.lastname) { query.lastname = req.query.lastname }
                    if (req.query.firstname) { query.firstname = req.query.firstname }
                    if (req.query.email) { query.email = req.query.email }
                    if (req.query.isactive) { query.isActive = req.query.isactive }
                    if (req.query.isgain) { query.isGain = req.query.isgain }
                }
            
                const email = new Email({
                    title: req.body.title,
                    subject: req.body.subject,
                    text: req.body.context,
                    description: req.body.description
                });
            
            
            
                if (req.body.title && req.body.subject && req.body.context) {
            
                    const user_db = await User.find(query)
                    const user_db_email = user_db.map(x => x.email)
            
                    var smtpTransport = nodemailer.createTransport({
                        host: 'smtp.gmail.com',
                        port: 465,
                        secure: true,
                        auth: { user: 'ghiles@gmail.com', pass: 'g' },
                        tls: { rejectUnauthorized: false }, // do not fail on invalid certs 
                    });
            
                    var mailOptions = {
                        to: user_db_email,
                        from: 'fatb@gmail.com',
                        subject: req.body.subject,
                        text: req.body.context
                    };
            
                    email.save().then(() => {
            
                        smtpTransport.sendMail(mailOptions)
                            .then(() =>  res.status(200).json(email))
                            .catch(() => res.status(500).json({ success: false, message: `erreur dans l'envoi de mail` }))
            
                    }).catch(() => res.status(200).json({  success: false, message: `erreur dans le serveur` }))
            
                } else {
                    res.status(400).json({ success: false, message: `Veuillez renseigner le titre et l'objet et le contexte du mail` })
                }
            
            
            
            
            
            module.exports = router; 
            

            【讨论】:

              【解决方案8】:
              host: 'smtp.host.com',
              port: 587,     // 587 or 25 or 2525
              secure: false, // secure:true for port 465, secure:false for port 587
              auth: {
                  user: 'mymail@test.com',
                  pass: '1234'
              }
              

              试试这个。为 smtp 添加前缀并更改端口。

              【讨论】:

                猜你喜欢
                • 2015-05-19
                • 1970-01-01
                • 1970-01-01
                • 2016-06-18
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多