【问题标题】:Use smtp client to send email without providing password使用 smtp 客户端发送电子邮件,无需提供密码
【发布时间】:2016-08-16 06:22:32
【问题描述】:

我正在使用 nodemailer 尝试通过命令行向自己发送电子邮件:

var nodemailer = require('nodemailer');

// config
var smtpConfig = {
    host: 'smtp.myhost.com',
    port: 465,
    secure: false, // dont use SSL
    tls: {rejectUnauthorized: false} 
};

// create reusable transporter object using the default SMTP transport
var transporter = nodemailer.createTransport(smtpConfig);

// setup e-mail data with unicode symbols
var mailOptions = {
    from: '"Fred Foo ????" <foo@blurdybloop.com>', // sender address
    to: 'person@gmail.com', // list of receivers
    subject: 'Hello ✔', // Subject line
    text: 'Hello world ????', // plaintext body
    html: '<b>Hello world ????</b>' // html 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);
});

当我尝试运行此代码时,出现以下错误:

Error: Invalid login: 535-5.7.8 Username and Password not accepted. Learn more at\n535 5.7.8  https://support.google.com/mail/answer/14257

该链接会将您带到一个页面,该页面告诉您在 Google 控制台中注册您的应用程序。但这不是我想要做的。

有很多电子邮件客户端可以将电子邮件发送到 gmail 收件箱,而无需登录 该电子邮件帐户。这就是我想要做的。我正在尝试将我的终端变成一个可以向任何收件箱发送邮件的 smtp 客户端。这不应该需要广泛的身份验证。我该怎么做?

注意

只是为了提供一些观点,我正在尝试使用 unix sendmail 命令在节点中复制可能的内容:

sendmail person@gmail.com < testemail.txt

如何使用 nodemailer 做到这一点?

【问题讨论】:

  • 发送到 gmail 与使用 gmail 发送电子邮件完全不同。
  • 我知道...我正在尝试发送 gmail。
  • @Mark B。我想你在一个简短的想法中总结了这个问题。我认为我“看到”的时间还不够早。
  • @MarcB 虽然这可能是真的,但对于不理解的人来说,这听起来像是一个谜。有什么区别?
  • 您在问为什么 [在此处插入 SMTP 服务器] 不是 Open Mail Relay,以及为什么开放邮件中继不再常见。该链接应该让您感到困惑。

标签: javascript node.js email smtp nodemailer


【解决方案1】:

试试 587 端口。

这是我的 gmail 设置。

smtpServerName="smtp.gmail.com" 
portNumber="587" 
authenticationMode="SSL" 
smtpUserName="somebody@gmail.com" 
smtpUserPassword="xxxxxxxxxx"

我会尝试使用 ssl: false 和 ssl: true

nodemailer.SMTP = {
    host: 'smtp.gmail.com',
    port: 587,
    ssl: false,
    use_authentication: true,
    user: 'my.username@gmail.com',
    pass: 'my.password'
}

请务必阅读以下内容:

https://support.google.com/accounts/answer/6010255

看来 gmail 有两种方式。

端口 587 是(非 ssl)但使用 TLS。

端口 465 是 SSL(但不是 TLS)。

去看看。

    //singleServer = new SmtpServerSettings("smtp.gmail.com",
    //      "myname@gmail.com", "587", AuthenticationType.Basic,
    //    "myname@gmail.com", "mypassword", "");

    //singleServer = new SmtpServerSettings("smtp.gmail.com",
    //      "myname@gmail.com", "465", AuthenticationType.SSL,
    //      "myname@gmail.com", "mypassword", "");

【讨论】:

  • 所以这是我的问题的重点:我不明白为什么我需要提供用户名和密码。我没有登录服务。我基本上是在尝试用 from 和 to 地址包装 sendmail 命令。此外,即使切换到端口 587 后,我也会遇到同样的错误。
  • (大多数情况下,尤其是使用“云”smtp 服务器):您需要向 smtp 服务提供凭据。这就是他们知道你是“合法”的方式。如果您没有提供凭据,那么任何人/每个人都会通过 gmail smtp 服务器发送电子邮件.....又名垃圾邮件城。我不知道你为什么会这么想。
  • 他们如何验证不属于 google 的服务?如果我使用第三方身份不明的 smtp 服务怎么办?他们将如何进行身份验证?
  • “正在尝试发送到 gmail”。您计划使用的 smtp 服务器是什么?这是你的基本问题。每个 smtp 服务器都有自己的设置信息。
  • 我正在尝试从头开始写一个。但目前我正在使用一个简单的客户端来发送邮件。 sendmail 无需身份验证即可执行此操作。为什么我不能在节点中复制它?
猜你喜欢
  • 2020-12-22
  • 2019-01-20
  • 1970-01-01
  • 2013-08-28
  • 1970-01-01
  • 2014-11-13
  • 1970-01-01
  • 2018-07-15
  • 2013-09-30
相关资源
最近更新 更多