Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用Gmail新API发送带有附件的邮件,但不显示收件人';s收件箱_Php_Email_Gmail_Attachment_Gmail Api - Fatal编程技术网

Php 使用Gmail新API发送带有附件的邮件,但不显示收件人';s收件箱

Php 使用Gmail新API发送带有附件的邮件,但不显示收件人';s收件箱,php,email,gmail,attachment,gmail-api,Php,Email,Gmail,Attachment,Gmail Api,我们正在使用他们提供的最新API集成GMail,作为在我们的应用程序中开发电子邮件客户端的一部分。我们使用的是谷歌提供的PHP客户端库 请参阅链接 在这里,我试图发送一封带有附件的邮件。在这里,我们生成了与message/rfc822兼容的文本,并使用“raw”参数传递它。这里我发现的问题是,在执行代码之后,当我检查通过GMail API发送的邮件的发送邮件时,附件显示正确。但它不会为发件人的邮箱接收/显示 有关更多信息,请参阅代码: require_once DOCUMENT_ROOT . '

我们正在使用他们提供的最新API集成GMail,作为在我们的应用程序中开发电子邮件客户端的一部分。我们使用的是谷歌提供的PHP客户端库

请参阅链接

在这里,我试图发送一封带有附件的邮件。在这里,我们生成了与message/rfc822兼容的文本,并使用“raw”参数传递它。这里我发现的问题是,在执行代码之后,当我检查通过GMail API发送的邮件的发送邮件时,附件显示正确。但它不会为发件人的邮箱接收/显示

有关更多信息,请参阅代码:

require_once DOCUMENT_ROOT . '/../library/google/src/Google/Client.php';
require_once DOCUMENT_ROOT . '/../library/google/src/Google/Service/Gmail.php';

function encodeRecipients($recipient){
    $recipientsCharset = 'utf-8';
    if (preg_match("/(.*)<(.*)>/", $recipient, $regs)) {
        $recipient = '=?' . $recipientsCharset . '?B?'.base64_encode($regs[1]).'?= <'.$regs[2].'>';
    }
    return $recipient;
}

$isAccessCodeExpired = 0;
$arrAccessToken = array();
$session = new Zend_Session_Namespace();

$client = new Google_Client();
$client->setClientId($this->client_id);
$client->setClientSecret($this->client_secret);
$client->setRedirectUri($this->redirect_uri);
$client->setAccessType('offline');
$client->setApprovalPrompt('force');

$client->addScope("https://mail.google.com/");
$client->addScope("https://www.googleapis.com/auth/gmail.compose");
$client->addScope("https://www.googleapis.com/auth/gmail.modify");
$client->addScope("https://www.googleapis.com/auth/gmail.readonly");


if ($this->getRequest()->getParam('code')) {
    $code = $this->getRequest()->getParam('code');
    $client->authenticate($code);
    $session->gmail_access_token = $client->getAccessToken();
    //$redirect = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'];
    $redirect = BASE_PATH . '/oauth2callback';
    header('Location: ' . filter_var($redirect, FILTER_SANITIZE_URL));
}

$isAccessCodeExpired = $client->isAccessTokenExpired();
if (isset($session->gmail_access_token) && $session->gmail_access_token != "" && $isAccessCodeExpired !== 1) {

    $client->setAccessToken($session->gmail_access_token);            
    $objGMail = new Google_Service_Gmail($client);

    $strMailContent = 'This is a test mail which is sent via using Gmail API client library.<br/><br/><br/>Thanks,<br/>GMail API Team.';
    $strMailTextVersion = strip_tags($strMailContent, '');

    $strRawMessage = "";
    $boundary = uniqid(rand(), true);
    $subjectCharset = $charset = 'utf-8';
    $strToMailName = 'To User Name';
    $strToMail = 'toemail@gmail.com';
    $strSesFromName = 'From User Name';
    $strSesFromEmail = 'fromemail@gmail.com';
    $strSubject = 'Test mail using GMail API - with attachment - ' . date('M d, Y h:i:s A');

    $strRawMessage .= 'To: ' . encodeRecipients($strToMailName . " <" . $strToMail . ">") . "\r\n";
    $strRawMessage .= 'From: '. encodeRecipients($strSesFromName . " <" . $strSesFromEmail . ">") . "\r\n";

    $strRawMessage .= 'Subject: =?' . $subjectCharset . '?B?' . base64_encode($strSubject) . "?=\r\n";
    $strRawMessage .= 'MIME-Version: 1.0' . "\r\n";
    $strRawMessage .= 'Content-type: Multipart/Alternative; boundary="' . $boundary . '"' . "\r\n";

    $filePath = '/home/server/Downloads/credentials.csv';
    $finfo = finfo_open(FILEINFO_MIME_TYPE); // return mime type ala mimetype extension
    $mimeType = finfo_file($finfo, $filePath);
    $fileName = 'credentials.csv';
    $fileData = base64_encode(file_get_contents($filePath));

    $strRawMessage .= "\r\n--{$boundary}\r\n";
    $strRawMessage .= 'Content-Type: '. $mimeType .'; name="'. $fileName .'";' . "\r\n";            
    $strRawMessage .= 'Content-ID: <' . $strSesFromEmail . '>' . "\r\n";            
    $strRawMessage .= 'Content-Description: ' . $fileName . ';' . "\r\n";
    $strRawMessage .= 'Content-Disposition: attachment; filename="' . $fileName . '"; size=' . filesize($filePath). ';' . "\r\n";
    $strRawMessage .= 'Content-Transfer-Encoding: base64' . "\r\n\r\n";
    $strRawMessage .= chunk_split(base64_encode(file_get_contents($filePath)), 76, "\n") . "\r\n";
    $strRawMessage .= '--' . $boundary . "\r\n";

    $strRawMessage .= "\r\n--{$boundary}\r\n";
    $strRawMessage .= 'Content-Type: text/plain; charset=' . $charset . "\r\n";
    $strRawMessage .= 'Content-Transfer-Encoding: 7bit' . "\r\n\r\n";
    $strRawMessage .= $strMailTextVersion . "\r\n";

    $strRawMessage .= "--{$boundary}\r\n";
    $strRawMessage .= 'Content-Type: text/html; charset=' . $charset . "\r\n";
    $strRawMessage .= 'Content-Transfer-Encoding: quoted-printable' . "\r\n\r\n";
    $strRawMessage .= $strMailContent . "\r\n";

    //Send Mails
    //Prepare the message in message/rfc822
    try {
        // The message needs to be encoded in Base64URL
        $mime = rtrim(strtr(base64_encode($strRawMessage), '+/', '-_'), '=');
        $msg = new Google_Service_Gmail_Message();
        $msg->setRaw($mime);
        $objSentMsg = $objGMail->users_messages->send("me", $msg);

        print('Message sent object');
        print($objSentMsg);

    } catch (Exception $e) {
        print($e->getMessage());
        unset($_SESSION['access_token']);
    }
}
require_once DOCUMENT_ROOT.'//library/google/src/google/Client.php';
需要一次文档\u根。“//library/google/src/google/Service/Gmail.php';
函数编码收件人($recipient){
$Recipientsharset='utf-8';
if(预匹配(“/(.*)/”,$recipient,$regs)){
$recipient='=?'.$recipientsCharset'.'B?'.base64_编码($regs[1])。';
}
返回$recipient;
}
$isAccessCodeExpired=0;
$arrAccessToken=array();
$session=new Zend_session_Namespace();
$client=新的Google_客户端();
$client->setClientId($this->client\u id);
$client->setClientSecret($this->client\u secret);
$client->setRedirectUri($this->redirect\u uri);
$client->setAccessType('offline');
$client->setApprovalPrompt('force');
$client->addScope(“https://mail.google.com/");
$client->addScope(“https://www.googleapis.com/auth/gmail.compose");
$client->addScope(“https://www.googleapis.com/auth/gmail.modify");
$client->addScope(“https://www.googleapis.com/auth/gmail.readonly");
如果($this->getRequest()->getParam('code')){
$code=$this->getRequest()->getParam('code');
$client->authenticate($code);
$session->gmail_access_token=$client->getAccessToken();
//$redirect='http://'.$\u服务器['http\u主机].$\u服务器['PHP\u SELF'];
$redirect=BASE_路径。'/oauth2callback';
标题('Location:'.filter_var($redirect,filter_SANITIZE_URL));
}
$isAccessCodeExpired=$client->isAccessTokenExpired();
如果(设置($session->gmail\u访问\u令牌)&&&$session->gmail\u访问\u令牌!=“”&&$isAccessCodeExpired!==1){
$client->setAccessToken($session->gmail\u访问令牌);
$objGMail=新谷歌服务\ Gmail($client);
$strMailContent='这是一封通过使用Gmail API客户端库发送的测试邮件。




谢谢,
Gmail API团队。'; $strMailTextVersion=strip_标签($strMailContent,”); $strRawMessage=“”; $boundary=uniqid(rand(),true); $subjectCharset=$charset='utf-8'; $strToMailName='To User Name'; $STROTOMAIL=toemail@gmail.com'; $stresfromname='来自用户名'; $STRESFROMEMAIL=$fromemail@gmail.com'; $strSubject='testmail usinggmailapi-withattachment-'.date('md,yh:i:sa'); $strRawMessage.='To:'.encodeRecipients($strToMailName。“”)。\r\n; $strRawMessage.='From:'.encodeRecipients($stresFromName。“”)。\r\n; $strRawMessage.='Subject:=?'。$subjectCharset.'B?'。base64_编码($strSubject)。“?=\r\n”; $strRawMessage.='MIME版本:1.0'。“\r\n”; $strRawMessage.='内容类型:多部分/可选;边界=“'.$boundary.”“\r\n”; $filePath='/home/server/Downloads/credentials.csv'; $finfo=finfo_open(FILEINFO_MIME_TYPE);//返回MIME类型ala mimetype扩展 $mimeType=finfo_文件($finfo,$filePath); $fileName='credentials.csv'; $fileData=base64_编码(文件获取内容($filePath)); $strRawMessage.=“\r\n--{$boundary}\r\n”; $strRawMessage.='内容类型:'.$mimeType.';name=“'.$fileName.';”。“\r\n”; $strRawMessage.=“内容ID:”。“\r\n”; $strRawMessage.='Content Description:'.$fileName.';'.“\r\n”; $strRawMessage.='Content-Disposition:attachment;filename=“'.$filename.”“size=”.filesize($filePath)。;“.\r\n”; $strRawMessage.='Content-Transfer-Encoding:base64'。“\r\n\r\n”; $strRawMessage.=块分割(base64编码(文件获取内容($filePath)),76,“\n”)。“\r\n”; $strRawMessage.='-'.$boundary.\r\n; $strRawMessage.=“\r\n--{$boundary}\r\n”; $strRawMessage.='内容类型:text/plain;charset='。$charset.\r\n; $strRawMessage.='内容传输编码:7bit'。“\r\n\r\n”; $strRawMessage.=$strMiltExtVersion.\r\n; $strRawMessage.=“--{$boundary}\r\n”; $strRawMessage.='内容类型:text/html;字符集='。$charset.\r\n; $strRawMessage.='内容传输编码:带引号的可打印'。“\r\n\r\n”; $strRawMessage.=$strMailContent.\r\n; //寄信 //在message/rfc822中准备消息 试一试{ //该消息需要用Base64URL编码 $mime=rtrim(strtr(base64_编码($strRawMessage),“+/”、“-”、“=”); $msg=新的Google_服务_Gmail_消息(); $msg->setRaw($mime); $objSentMsg=$objGMail->users\u messages->send(“我”,$msg); 打印(“消息发送对象”); 打印($objSentMsg); }捕获(例外$e){ 打印($e->getMessage()); 取消设置($_会话['access_token']); } }
请帮帮我。。。 提前感谢。

更换您的:

$strRawMessage .= 'Content-type: Multipart/Alternative; boundary="' . $boundary . '"' . "\r\n";
与:


你检查过垃圾邮件文件夹了吗?我遇到了一些问题,因为邮件标题数据错误,邮件最后出现在收件人的收件箱中,但没有附件。您是否有任何在PHP中使用GMail API发送邮件的正常工作代码示例?您的代码对我来说运行良好。我可以在“已发送邮件”文件夹和“收件箱”中看到附件。我和你一样使用csv附件。你的文件不知怎么损坏了吗?你能用另一个CSV再试一次吗?你作为一个问题提供的代码帮助我回答了一个问题。谢谢你,斯雷吉思!我可以用或发送邮件
$strRawMessage .= 'Content-type: Multipart/Mixed; boundary="' . $boundary . '"' . "\r\n";