在我的项目中,联系请求表单被发送到HTTP Firebase功能(Google Cloud Function包装器......),收到的数据应发送给gmail用户contact@mydomain.org(G Suite帐户) (我不想使用像SendGrid这样的其他服务......)
目前我使用gmail.users.messages.send()发送邮件,显然GMail API正在使用Googlea帐户管理员电子邮件覆盖来自:原始发件人电子邮件...
我试图在gmail.users.settings.sendAs.create()之前运行以添加来自:email地址的原始文件,但在这种情况下我还需要设置一个smtpMsa服务器作为中继...
无论如何从收到的数据(来自:msg_text :)建立邮件消息并直接插入我的contact@mydomain.org gmail框以模拟'收到的消息中包含正确的信息?或者它应该只由smtp服务器发送?
更新
我可以使用users.message.import()... 但是如果我导入到另一个电子邮件地址(联系人@)而不是帐户管理员...
,我会收到错误{"infos":"Delegation denied for admin@mydomain.org"}
这项工作 return gmail.users.messages.import({ userId:config_key.admin_email, 资源:{ raw:encodedMessage } });
这不工作
return gmail.users.messages.import({
userId: config_key.contact_email,
resource: {
raw: encodedMessage
}
});
答案 0 :(得分:0)
我们可以!
我最终成功了......直接将邮件插入我的Google Suite电子邮件地址..而from:地址实际上是原始的联系表单发件人电子邮件地址!
function gMailInserMessage (sender_name, sender_email, msg_text) {
// Create a new JWT client using the key file downloaded from the Google Developer Console
const jwtClient = new google.auth.JWT(
postoffice_key.client_email, // service account with Domain-Wide delagation of Authority
null,
postoffice_key.private_key,
_.values(config_key.scopes.postoffice),
config_key.admin_email // subject (or sub) impersonated user
);
return jwtClient.authorize().then(tokens => {
// Obtain a new gmail client, making sure we pass along the auth client
const gmail = google.gmail({
version: 'v1',
auth: jwtClient
});
// Base64-encode the mail and make it URL-safe
// (replace all "+" with "-" and all "/" with "_")
var encodedMessage = btoa([
'From: ' + sender_email + '\r\n',
'To: ' + config_key.admin_email + '\r\n',
'Subject: Contact\r\n\r\n',
msg_text
].join("")).replace(/\+/g, '-').replace(/\//g, '_');
//Make an authorized request to insert a User Messages
return gmail.users.messages.insert({
userId: 'me', // impersonated authorized user
resource: {
raw: encodedMessage
}
});
}).then(res => res.data);
}
回复是:
{"status":200,"infos":
{"id":"1639b41c26584963","threadId":"1639b41c26584963"}}