Anandhan
Anandhan

Reputation: 432

How do I send email using gmail api php

How do I send email using gmail api php

$msg['raw'] = "This is sample test message";            
$msg['To'] = "[email protected]";
$msg['subject'] = "Sample test subject";

currently i am using $message = $service->users_messages->send('me', $msg);

Where to difine to,subject ?

Upvotes: 2

Views: 20902

Answers (3)

Francisco Luz
Francisco Luz

Reputation: 2943

Swiftmailer has all the tools for building base64 message.

Here is a full sample for sending a email:

// Visit https://developers.google.com/gmail/api/quickstart/php
// for an example of how to build the getClient() function.
$client = getClient();

$service = new \Google_Service_Gmail($client);
$mailer = $service->users_messages;

$message = (new \Swift_Message('Here is my subject'))
    ->setFrom('[email protected]')
    ->setTo(['[email protected]' => 'Test Name'])
    ->setContentType('text/html')
    ->setCharset('utf-8')
    ->setBody('<h4>Here is my body</h4>');

$msg_base64 = (new \Swift_Mime_ContentEncoder_Base64ContentEncoder())
    ->encodeString($message->toString());

$message = new \Google_Service_Gmail_Message();
$message->setRaw($msg_base64);
$message = $mailer->send('me', $message);
print_r($message);

Edit in November 2021

Swiftmailer has reached its end of life. See swiftmailer's author blog post.

From now on you should use the Symfony Mailer component.

Upvotes: 12

Ashit Vora
Ashit Vora

Reputation: 2922

I am using the same code and it does work fine except that it always sends a plain text email.

Isn't specifying Content-Type: text/html; enough?

Upvotes: 0

Raju
Raju

Reputation: 201

Based on http://www.pipiscrew.com/2015/04/php-send-mail-through-gmail-api/ here is the answer:

$user = 'me';
$strSubject = 'Test mail using GMail API' . date('M d, Y h:i:s A');
$strRawMessage = "From: myAddress<[email protected]>\r\n";
$strRawMessage .= "To: toAddress <[email protected]>\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";
// The message needs to be encoded in Base64URL
$mime = rtrim(strtr(base64_encode($strRawMessage), '+/', '-_'), '=');
$msg = new Google_Service_Gmail_Message();
$msg->setRaw($mime);
//The special value **me** can be used to indicate the authenticated user.
$service->users_messages->send("me", $msg);

Upvotes: 20

Related Questions