收件人地址需要代码”:400 在 Laravel PHP 中使用 Gmail API 发送电子邮件
Posted
技术标签:
【中文标题】收件人地址需要代码”:400 在 Laravel PHP 中使用 Gmail API 发送电子邮件【英文标题】:Recipient address required code": 400 in sending an email using Gmail API in Laravel PHP 【发布时间】:2020-07-07 02:10:16 【问题描述】:我正在尝试通过 Gmail API 集成通过我的系统发送电子邮件,但我收到一个错误,即
Google_Service_Exception “错误”:“错误”:[“域”:“全局”,“原因”:“invalidArgument”,“消息”:“需要收件人地址”],“代码”:400,“消息”: “需要收件人地址”
这是 Laravel 中的代码:
$obj = new \Google_Service_Gmail_Message ();
$raw = "MIME-Version: 1.0\n\r
From: Muhammad Bilal <muhammad.bilal@dynamologic.com>\n\r
To: Umer Sheikh <umer.sheikh@dynamologic.com>\n\r
Subject: SIMPLE TEXT EMAIL\n\r
Date: Thu, 5 Mar 2020 18:45:33 +0500\n\r
Message-ID: <1234@local.machine.example>\n\r
Content-Type: text/plain; charset=\"UTF-8\"\n\r
\n\r
NO BODY";
$raw = rtrim(strtr(base64_encode($raw), '+/', '-_'), '=');
$obj->setRaw($raw);
$obj->setId('1234');
$obj->setInternalDate(null);
$obj->setLabelIds(null);
$payload = new \Google_Service_Gmail_MessagePart ();
$body = new \Google_Service_Gmail_MessagePartBody ();
$body->setData('test');
$body->setSize('1');
$payload->setBody($body);
$obj->setPayload($payload);
$results = $service->users_messages->send($user, $obj);
【问题讨论】:
【参考方案1】:问题已解决,找到有效的示例代码
$user = 'me';
$strSubject = 'Test mail using GMail API' . date('M d, Y h:i:s A');
$strRawMessage = "From: Muhammad Bilal <muhammad.bilal@dynamologic.com>\r\n";
$strRawMessage .= "To: Muhammad Bilal <mb3451@yahoo.com>\r\n";
$strRawMessage .= 'Subject: =?utf-8?B?' . base64_encode($strSubject) . "?=\r\n";
$strRawMessage .= "MIME-Version: 1.0\r\n";
$strRawMessage .= "Content-Type: text/html; charset=utf-8\r\n";
$strRawMessage .= 'Content-Transfer-Encoding: quoted-printable' . "\r\n\r\n";
$strRawMessage .= "this <b>is a test message!\r\n";
$mime = rtrim(strtr(base64_encode($strRawMessage), '+/', '-_'), '=');
$msg = new \Google_Service_Gmail_Message();
$msg->setRaw($mime);
$service->users_messages->send("me", $msg);
【讨论】:
【参考方案2】:您收到的错误消息是由于Content-Type
的类型应该是message/rfc822
而不是 text/plain
:
如Users.messages: send
documentation中提到的:
此方法支持 /upload URI 并接受具有以下特征的上传媒体:
最大文件大小: 35MB
接受的媒体 MIME 类型:
message/rfc822
因此,整个电子邮件消息应采用 RFC 2822 格式的 base64url 编码字符串。
参考
Gmail API Send Messages【讨论】:
已更新,但仍然出现相同的错误 $raw = "MIME-Version: 1.0\n\r From: Muhammad Bilalcharset=\"UTF-8\"
怎么样,您仍然收到同样的错误吗?干杯!
是的,即使删除 charset=\"UTF-8\",我仍然遇到同样的错误以上是关于收件人地址需要代码”:400 在 Laravel PHP 中使用 Gmail API 发送电子邮件的主要内容,如果未能解决你的问题,请参考以下文章