Mailgun - 来自 guest.com 的未经身份验证的电子邮件
Mailgun - Unauthenticated email from guest.com
我在 node.js 中使用 nodemailer 设置了 mailgun,当我使用 REST 客户端测试我的路由时,我无法让它发送电子邮件。当我直接将代码写入服务器文件时,电子邮件会在服务器启动时立即发送。
但是,当我在 app.post 中编写电子邮件 api 并使用 REST 客户端对其进行测试时,电子邮件在 mailgun 端失败并被 google 拒绝???由于我得到的错误代码,这只是我的假设。
Server response: 550 5.7.1 Unauthenticated email from guest.com is not
accepted due to domain's 5.7.1 DMARC policy. Please contact the administrator
of guest.com domain if 5.7.1 this was a legitimate mail. Please visit 5.7.1
https://support.google.com/mail/answer/2451690 to learn about the 5.7.1 DMARC
initiative. s12-v6si3013316qtg.362 - gsmtp
我已按照提供的 link 进行操作,文档中说要检查域服务器。我不明白为什么会出现此错误,因为我已经在 mailgun 中验证了我的 gmail。
我也尝试过直接使用 mailgun-js 中间件。从 mailgun.com、github 上的 mailgun-js 和 npmjs.com 上找到三个不同的 mailgun-js api。得到了和上面一样的错误。
不知所措。不知道怎么办。
我的 nodemailer 代码:
const express = require('express');
const nodemailer = require('nodemailer');
const path = require('path');
const bodyParser = require('body-parser');
const app = express();
const port = 3000;
app.use(bodyParser.json());
app.use(express.static(path.join(__dirname, 'dist')));
app.post('/email', (req, res) => {
let transporter = nodemailer.createTransport({
host: 'smtp.mailgun.org',
port: 587,
secure: false, // true for 465, false for other ports
auth: {
user: 'postmaster@sandboxc8f2ecf64f364ca6ad740e658485c557.mailgun.org',
pass: 'my API key here'
},
tls: {
rejectUnauthorized: false
}
});
// setup email data with unicode symbols
let mailOptions = {
from: req.body.from, // sender address
to: 'cu0ngpitt@gmail.com', // list of receivers
subject: 'Someone wrote you from your Online Resume!', // Subject line
text: req.body.messge, // plain text body
};
// send mail with defined transport object
transporter.sendMail(mailOptions, (error, info) => {
if (error) {
return console.log(error);
}
console.log('Message sent: %s', info.messageId);
console.log('Preview URL: %s', nodemailer.getTestMessageUrl(info));
});
});
app.get('/', (req, res) => {
res.send('Hello world');
});
app.listen(port, () => {
console.log('Server running on port ' + port);
})
Mailgun 回复了我的请求并说由于 DMARC 安全,我只能发送与我的 mailgun 帐户具有相同域的电子邮件。
因为我有一个免费的 mailgun 帐户。我不得不将我的发件人地址更改为我的免费 mailgun 地址,即 postmaster@sandbox"some long string".mailgun.org
如果使用 nodemailer,您可以省略发件人电子邮件或将其硬编码。
如果使用 mailgun-js,则必须对其进行硬编码。
我的旧代码:
// setup email data with unicode symbols
let mailOptions = {
from: req.body.from, // sender address
to: 'cu0ngpitt@gmail.com', // list of receivers
subject: 'Someone wrote you from your Online Resume!', // Subject line
text: req.body.messge, // plain text body
};
更正后的代码:
// setup email data with unicode symbols
let mailOptions = {
postmaster@sandbox"some long string".mailgun.org, // sender address
to: 'cu0ngpitt@gmail.com', // list of receivers
subject: 'Someone wrote you from your Online Resume!', // Subject line
text: req.body.messge, // plain text body
};
我在 node.js 中使用 nodemailer 设置了 mailgun,当我使用 REST 客户端测试我的路由时,我无法让它发送电子邮件。当我直接将代码写入服务器文件时,电子邮件会在服务器启动时立即发送。
但是,当我在 app.post 中编写电子邮件 api 并使用 REST 客户端对其进行测试时,电子邮件在 mailgun 端失败并被 google 拒绝???由于我得到的错误代码,这只是我的假设。
Server response: 550 5.7.1 Unauthenticated email from guest.com is not
accepted due to domain's 5.7.1 DMARC policy. Please contact the administrator
of guest.com domain if 5.7.1 this was a legitimate mail. Please visit 5.7.1
https://support.google.com/mail/answer/2451690 to learn about the 5.7.1 DMARC
initiative. s12-v6si3013316qtg.362 - gsmtp
我已按照提供的 link 进行操作,文档中说要检查域服务器。我不明白为什么会出现此错误,因为我已经在 mailgun 中验证了我的 gmail。
我也尝试过直接使用 mailgun-js 中间件。从 mailgun.com、github 上的 mailgun-js 和 npmjs.com 上找到三个不同的 mailgun-js api。得到了和上面一样的错误。
不知所措。不知道怎么办。
我的 nodemailer 代码:
const express = require('express');
const nodemailer = require('nodemailer');
const path = require('path');
const bodyParser = require('body-parser');
const app = express();
const port = 3000;
app.use(bodyParser.json());
app.use(express.static(path.join(__dirname, 'dist')));
app.post('/email', (req, res) => {
let transporter = nodemailer.createTransport({
host: 'smtp.mailgun.org',
port: 587,
secure: false, // true for 465, false for other ports
auth: {
user: 'postmaster@sandboxc8f2ecf64f364ca6ad740e658485c557.mailgun.org',
pass: 'my API key here'
},
tls: {
rejectUnauthorized: false
}
});
// setup email data with unicode symbols
let mailOptions = {
from: req.body.from, // sender address
to: 'cu0ngpitt@gmail.com', // list of receivers
subject: 'Someone wrote you from your Online Resume!', // Subject line
text: req.body.messge, // plain text body
};
// send mail with defined transport object
transporter.sendMail(mailOptions, (error, info) => {
if (error) {
return console.log(error);
}
console.log('Message sent: %s', info.messageId);
console.log('Preview URL: %s', nodemailer.getTestMessageUrl(info));
});
});
app.get('/', (req, res) => {
res.send('Hello world');
});
app.listen(port, () => {
console.log('Server running on port ' + port);
})
Mailgun 回复了我的请求并说由于 DMARC 安全,我只能发送与我的 mailgun 帐户具有相同域的电子邮件。
因为我有一个免费的 mailgun 帐户。我不得不将我的发件人地址更改为我的免费 mailgun 地址,即 postmaster@sandbox"some long string".mailgun.org
如果使用 nodemailer,您可以省略发件人电子邮件或将其硬编码。
如果使用 mailgun-js,则必须对其进行硬编码。
我的旧代码:
// setup email data with unicode symbols
let mailOptions = {
from: req.body.from, // sender address
to: 'cu0ngpitt@gmail.com', // list of receivers
subject: 'Someone wrote you from your Online Resume!', // Subject line
text: req.body.messge, // plain text body
};
更正后的代码:
// setup email data with unicode symbols
let mailOptions = {
postmaster@sandbox"some long string".mailgun.org, // sender address
to: 'cu0ngpitt@gmail.com', // list of receivers
subject: 'Someone wrote you from your Online Resume!', // Subject line
text: req.body.messge, // plain text body
};