如何使用 gmail api 在特定日期和时间安排电子邮件? 替代解决方法

问题描述

我想问一下是否有人知道如何使用 gmail API 安排电子邮件。我正在使用 Laravel 8。 例如,我需要的是安排在特定日期和特定时间发送电子邮件。我已经有了正常发送邮件功能,但现在我还需要这个功能来安排发送。如果有人可以帮助我,请指出 gmail api 的示例或功能,我将不胜感激。谢谢。 这是我在 Laravel 控制器中的功能

public function sendGoogleGmail($sender,$to,$subject,$message_text,$files){ 
    session_start();
    
    if (isset($_SESSION['access_token']) && $_SESSION['access_token']) {
       $this->client->setAccesstoken($_SESSION['access_token']);
       try {
            $service = new Google_Service_Gmail($this->client);
            $mail = new PHPMailer(true);
            $mail->ContentType = 'text/html';
            $mail->CharSet = "UTF-8";
            $mail->From = $sender;
            $mail->FromName = auth()->user()->name;
            foreach ($to as $key => $email) {
                $mail->AddAddress($email);
            }
            //$mail->AddReplyTo(Contants::FROM,Contants::ALIAS);
            $mail->Subject = $subject;
            $mail->Body = $message_text;

            if(isset($files)){
                $path='files/filestemplateEmail/';
                foreach($files as $file){
                    $mail->AddAttachment($path . $file->name);
                }
            }
            
            $mail->preSend();
            $mime = $mail->getSentMIMEMessage();
            $mime = rtrim(strtr(base64_encode($mime),'+/','-_'),'=');
            $message = new Google_Service_Gmail_Message();
            $message->setRaw($mime);
            $service->users_messages->send('me',$message);
            
            
       } catch (Google_Service_Exception $e) {

            // $e->getMessage();
            return false;
       }
       return true;

    }  else {
        return redirect('/oauth');
    } 

解决方法

很遗憾,Gmail API 不支持此功能。您可以查看关于此问题的其他 SO 问题 here

替代解决方法

最好的替代方法是将电子邮件存储在队列中,并在预定时间通过 API 发送。

,

我认为您正在寻找队列/工人/作业,Laravel 实现了它开箱即用,您可以检查它here

请记住,要处理您的队列,您必须在服务器中运行第二个 php artisan 进程来处理队列,您也可以使用 redis 之类的服务来处理它。

希望对你有帮助=)