PMC-1346 Changes in the email server creation
This commit is contained in:
@@ -14,7 +14,7 @@ class EmailServer
|
||||
{
|
||||
private $arrayFieldDefinition = array(
|
||||
"MESS_UID" => array("type" => "string", "required" => false, "empty" => false, "defaultValues" => array(), "fieldNameAux" => "emailServerUid"),
|
||||
"MESS_ENGINE" => array("type" => "string", "required" => true, "empty" => false, "defaultValues" => array("PHPMAILER", "MAIL", "IMAP"), "fieldNameAux" => "emailServerEngine"),
|
||||
"MESS_ENGINE" => array("type" => "string", "required" => true, "empty" => false, "defaultValues" => array("PHPMAILER", "MAIL", "IMAP", "GMAILAPI"), "fieldNameAux" => "emailServerEngine"),
|
||||
"MESS_SERVER" => array("type" => "string", "required" => false, "empty" => true, "defaultValues" => array(), "fieldNameAux" => "emailServerServer"),
|
||||
"MESS_PORT" => array("type" => "int", "required" => false, "empty" => true, "defaultValues" => array(), "fieldNameAux" => "emailServerPort"),
|
||||
"MESS_INCOMING_SERVER" => array("type" => "string", "required" => false, "empty" => true, "defaultValues" => array(), "fieldNameAux" => "emailServerIncomingServer"),
|
||||
@@ -1127,7 +1127,7 @@ class EmailServer
|
||||
public function getEmailServerDataFromRecord(array $record)
|
||||
{
|
||||
try {
|
||||
return array(
|
||||
return [
|
||||
$this->getFieldNameByFormatFieldName("MESS_UID") => $record["MESS_UID"],
|
||||
$this->getFieldNameByFormatFieldName("MESS_ENGINE") => $record["MESS_ENGINE"],
|
||||
$this->getFieldNameByFormatFieldName("MESS_SERVER") => $record["MESS_SERVER"],
|
||||
@@ -1150,7 +1150,7 @@ class EmailServer
|
||||
$this->getFieldNameByFormatFieldName("OAUTH_CLIENT_ID") => $record["OAUTH_CLIENT_ID"],
|
||||
$this->getFieldNameByFormatFieldName("OAUTH_CLIENT_SECRET") => $record["OAUTH_CLIENT_SECRET"],
|
||||
$this->getFieldNameByFormatFieldName("OAUTH_REFRESH_TOKEN") => $record["OAUTH_REFRESH_TOKEN"]
|
||||
);
|
||||
];
|
||||
} catch (Exception $e) {
|
||||
throw $e;
|
||||
}
|
||||
|
||||
419
workflow/engine/src/ProcessMaker/GmailOAuth/GmailOAuth.php
Normal file
419
workflow/engine/src/ProcessMaker/GmailOAuth/GmailOAuth.php
Normal file
@@ -0,0 +1,419 @@
|
||||
<?php
|
||||
|
||||
namespace ProcessMaker\GmailOAuth;
|
||||
|
||||
use G;
|
||||
use Google_Client;
|
||||
use Google_Service_Gmail;
|
||||
use Google_Service_Gmail_Message;
|
||||
use PHPMailerOAuth;
|
||||
use ProcessMaker\BusinessModel\EmailServer;
|
||||
use ProcessMaker\Core\System;
|
||||
use TemplatePower;
|
||||
|
||||
class GmailOAuth
|
||||
{
|
||||
private $emailServerUid;
|
||||
private $emailEngine;
|
||||
private $clientID;
|
||||
private $clientSecret;
|
||||
private $fromAccount;
|
||||
private $senderEmail;
|
||||
private $senderName;
|
||||
private $sendTestMail;
|
||||
private $mailTo;
|
||||
private $setDefaultConfiguration;
|
||||
private $redirectURI;
|
||||
private $refreshToken;
|
||||
|
||||
/**
|
||||
* Set $emailServerUid property.
|
||||
* @param string $emailServerUid
|
||||
* @return void
|
||||
*/
|
||||
public function setEmailServerUid($emailServerUid): void
|
||||
{
|
||||
$this->emailServerUid = $emailServerUid;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set $clientID property.
|
||||
* @param string $clientID
|
||||
* @return void
|
||||
*/
|
||||
public function setClientID($clientID): void
|
||||
{
|
||||
$this->clientID = $clientID;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set $clientSecret property.
|
||||
* @param string $clientSecret
|
||||
* @return void
|
||||
*/
|
||||
public function setClientSecret($clientSecret): void
|
||||
{
|
||||
$this->clientSecret = $clientSecret;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set $redirectURI property.
|
||||
* @param string $redirectURI
|
||||
* @return void
|
||||
*/
|
||||
public function setRedirectURI($redirectURI): void
|
||||
{
|
||||
$this->redirectURI = $redirectURI;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set $emailEngine property.
|
||||
* @param string $emailEngine
|
||||
* @return void
|
||||
*/
|
||||
public function setEmailEngine($emailEngine): void
|
||||
{
|
||||
$this->emailEngine = $emailEngine;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set $fromAccount property.
|
||||
* @param string $fromAccount
|
||||
* @return void
|
||||
*/
|
||||
public function setFromAccount($fromAccount): void
|
||||
{
|
||||
$this->fromAccount = $fromAccount;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set $senderEmail property.
|
||||
* @param string $senderEmail
|
||||
* @return void
|
||||
*/
|
||||
public function setSenderEmail($senderEmail): void
|
||||
{
|
||||
$this->senderEmail = $senderEmail;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set $senderName property.
|
||||
* @param string $senderName
|
||||
* @return void
|
||||
*/
|
||||
public function setSenderName($senderName): void
|
||||
{
|
||||
$this->senderName = $senderName;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set $sendTestMail property.
|
||||
* @param string $sendTestMail
|
||||
* @return void
|
||||
*/
|
||||
public function setSendTestMail($sendTestMail): void
|
||||
{
|
||||
$this->sendTestMail = $sendTestMail;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set $mailTo property.
|
||||
* @param string $mailTo
|
||||
* @return void
|
||||
*/
|
||||
public function setMailTo($mailTo): void
|
||||
{
|
||||
$this->mailTo = $mailTo;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set $setDefaultConfiguration property.
|
||||
* @param string $setDefaultConfiguration
|
||||
* @return void
|
||||
*/
|
||||
public function setSetDefaultConfiguration($setDefaultConfiguration): void
|
||||
{
|
||||
$this->setDefaultConfiguration = $setDefaultConfiguration;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set $refreshToken property.
|
||||
* @param string $refreshToken
|
||||
* @return void
|
||||
*/
|
||||
public function setRefreshToken($refreshToken): void
|
||||
{
|
||||
$this->refreshToken = $refreshToken;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get $emailServerUid property.
|
||||
* @return string
|
||||
*/
|
||||
public function getEmailServerUid()
|
||||
{
|
||||
return $this->emailServerUid;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get $clientID property.
|
||||
* @return string
|
||||
*/
|
||||
public function getClientID()
|
||||
{
|
||||
return $this->clientID;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get $clientSecret property.
|
||||
* @return string
|
||||
*/
|
||||
public function getClientSecret()
|
||||
{
|
||||
return $this->clientSecret;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get $redirectURI property.
|
||||
* @return string
|
||||
*/
|
||||
public function getRedirectURI()
|
||||
{
|
||||
return $this->redirectURI;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get $emailEngine property.
|
||||
* @return string
|
||||
*/
|
||||
public function getEmailEngine()
|
||||
{
|
||||
return $this->emailEngine;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get $fromAccount property.
|
||||
* @return string
|
||||
*/
|
||||
public function getFromAccount()
|
||||
{
|
||||
return $this->fromAccount;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get $senderEmail property.
|
||||
* @return string
|
||||
*/
|
||||
public function getSenderEmail()
|
||||
{
|
||||
return $this->senderEmail;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get $senderName property.
|
||||
* @return string
|
||||
*/
|
||||
public function getSenderName()
|
||||
{
|
||||
return $this->senderName;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get $sendTestMail property.
|
||||
* @return string
|
||||
*/
|
||||
public function getSendTestMail()
|
||||
{
|
||||
return $this->sendTestMail;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get $mailTo property.
|
||||
* @return string
|
||||
*/
|
||||
public function getMailTo()
|
||||
{
|
||||
return $this->mailTo;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get $defaultConfiguration property.
|
||||
* @return string
|
||||
*/
|
||||
public function getSetDefaultConfiguration()
|
||||
{
|
||||
return $this->setDefaultConfiguration;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get $refreshToken property.
|
||||
* @return string
|
||||
*/
|
||||
public function getRefreshToken()
|
||||
{
|
||||
return $this->refreshToken;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a Google_Client object, this may vary depending on the service provider.
|
||||
* @return Google_Client
|
||||
*/
|
||||
public function getGoogleClient(): Google_Client
|
||||
{
|
||||
$googleClient = new Google_Client();
|
||||
$googleClient->setClientId($this->clientID);
|
||||
$googleClient->setClientSecret($this->clientSecret);
|
||||
$googleClient->setRedirectUri($this->redirectURI);
|
||||
$googleClient->setAccessType('offline');
|
||||
$googleClient->setApprovalPrompt('force');
|
||||
$googleClient->addScope(Google_Service_Gmail::MAIL_GOOGLE_COM);
|
||||
return $googleClient;
|
||||
}
|
||||
|
||||
/**
|
||||
* Save the data in the EmailServer table, and return the stored fields.
|
||||
* @return array
|
||||
*/
|
||||
public function saveEmailServer(): array
|
||||
{
|
||||
$result = [];
|
||||
$data = [
|
||||
"MESS_ENGINE" => $this->emailEngine,
|
||||
"OAUTH_CLIENT_ID" => $this->clientID,
|
||||
"OAUTH_CLIENT_SECRET" => $this->clientSecret,
|
||||
"OAUTH_REFRESH_TOKEN" => $this->refreshToken,
|
||||
"MESS_ACCOUNT" => $this->fromAccount,
|
||||
"MESS_FROM_MAIL" => $this->senderEmail,
|
||||
"MESS_FROM_NAME" => $this->senderName,
|
||||
"MESS_TRY_SEND_INMEDIATLY" => $this->sendTestMail,
|
||||
"MAIL_TO" => $this->mailTo,
|
||||
"MESS_DEFAULT" => $this->setDefaultConfiguration,
|
||||
"MESS_RAUTH" => 1,
|
||||
"SMTPSECURE" => "No",
|
||||
"MESS_PASSWORD" => "",
|
||||
"MESS_SERVER" => "smtp.gmail.com",
|
||||
"MESS_PORT" => "",
|
||||
"MESS_PASSWORD" => "",
|
||||
"MESS_INCOMING_SERVER" => "",
|
||||
"MESS_INCOMING_PORT" => ""
|
||||
];
|
||||
$emailServer = new EmailServer();
|
||||
if (empty($this->emailServerUid)) {
|
||||
$result = $emailServer->create($data);
|
||||
} else {
|
||||
$result = $emailServer->update($this->emailServerUid, $data);
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* This sends a test email with Google_Service_Gmail_Message object, as long
|
||||
* as the test flag is activated.
|
||||
* @return Google_Service_Gmail_Message
|
||||
*/
|
||||
public function sendTestEmailWithGoogleServiceGmail(): Google_Service_Gmail_Message
|
||||
{
|
||||
$googleServiceGmailMessage = new Google_Service_Gmail_Message();
|
||||
if (!filter_var($this->fromAccount, FILTER_VALIDATE_EMAIL)) {
|
||||
return $googleServiceGmailMessage;
|
||||
}
|
||||
if (!filter_var($this->senderEmail, FILTER_VALIDATE_EMAIL)) {
|
||||
return $googleServiceGmailMessage;
|
||||
}
|
||||
if (!filter_var($this->mailTo, FILTER_VALIDATE_EMAIL)) {
|
||||
return $googleServiceGmailMessage;
|
||||
}
|
||||
if ($this->sendTestMail === 0) {
|
||||
return $googleServiceGmailMessage;
|
||||
}
|
||||
|
||||
$googleClient = $this->getGoogleClient();
|
||||
$googleClient->refreshToken($this->getRefreshToken());
|
||||
if ($googleClient->isAccessTokenExpired()) {
|
||||
$newAccessToken = $googleClient->getAccessToken();
|
||||
$googleClient->setAccessToken($newAccessToken);
|
||||
}
|
||||
|
||||
$raw = $this->getRawMessage();
|
||||
$googleServiceGmailMessage->setRaw($raw);
|
||||
|
||||
$service = new Google_Service_Gmail($googleClient);
|
||||
$result = $service->users_messages->send("me", $googleServiceGmailMessage);
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get message body.
|
||||
* @return string
|
||||
*/
|
||||
public function getMessageBody(): string
|
||||
{
|
||||
$templateTower = new TemplatePower(PATH_TPL . "admin" . PATH_SEP . "email.tpl");
|
||||
$templateTower->prepare();
|
||||
$templateTower->assign("server", System::getServerHostname());
|
||||
$templateTower->assign("date", date("H:i:s"));
|
||||
$templateTower->assign("ver", System::getVersion());
|
||||
$templateTower->assign("engine", G::LoadTranslation("ID_MESS_ENGINE_TYPE_4"));
|
||||
$templateTower->assign("msg", G::LoadTranslation("ID_MESS_TEST_BODY"));
|
||||
$outputContent = $templateTower->getOutputContent();
|
||||
return $outputContent;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a plain text of the test message.
|
||||
* @return string
|
||||
*/
|
||||
public function getRawMessage(): string
|
||||
{
|
||||
$outputContent = $this->getMessageBody();
|
||||
|
||||
$strRawMessage = ""
|
||||
. "From: Email <{$this->fromAccount}> \r\n"
|
||||
. "To: <{$this->mailTo}>\r\n"
|
||||
. "Subject: =?utf-8?B?" . base64_encode(G::LoadTranslation("ID_MESS_TEST_SUBJECT")) . "?=\r\n"
|
||||
. "MIME-Version: 1.0\r\n"
|
||||
. "Content-Type: text/html; charset=utf-8\r\n"
|
||||
. "Content-Transfer-Encoding: quoted-printable\r\n\r\n"
|
||||
. "{$outputContent}\r\n";
|
||||
|
||||
$raw = rtrim(strtr(base64_encode($strRawMessage), '+/', '-_'), '=');
|
||||
return $raw;
|
||||
}
|
||||
|
||||
/**
|
||||
* This sends a test email with PHPMailerOAuth object, as long
|
||||
* as the test flag is activated.
|
||||
* @return PHPMailerOAuth
|
||||
*/
|
||||
public function sendTestMailWithPHPMailerOAuth(): PHPMailerOAuth
|
||||
{
|
||||
$phpMailerOAuth = new PHPMailerOAuth();
|
||||
if (!filter_var($this->fromAccount, FILTER_VALIDATE_EMAIL)) {
|
||||
return $phpMailerOAuth;
|
||||
}
|
||||
if (!filter_var($this->senderEmail, FILTER_VALIDATE_EMAIL)) {
|
||||
return $phpMailerOAuth;
|
||||
}
|
||||
if (!filter_var($this->mailTo, FILTER_VALIDATE_EMAIL)) {
|
||||
return $phpMailerOAuth;
|
||||
}
|
||||
if ($this->sendTestMail === 0) {
|
||||
return $phpMailerOAuth;
|
||||
}
|
||||
$phpMailerOAuth->isHTML(true);
|
||||
$phpMailerOAuth->isSMTP();
|
||||
$phpMailerOAuth->Host = 'smtp.gmail.com';
|
||||
$phpMailerOAuth->SMTPAuth = true;
|
||||
$phpMailerOAuth->AuthType = 'XOAUTH2';
|
||||
$phpMailerOAuth->oauthUserEmail = $this->fromAccount;
|
||||
$phpMailerOAuth->oauthClientId = $this->clientID;
|
||||
$phpMailerOAuth->oauthClientSecret = $this->clientSecret;
|
||||
$phpMailerOAuth->oauthRefreshToken = $this->refreshToken;
|
||||
$phpMailerOAuth->SetFrom($this->senderEmail, $this->senderName);
|
||||
$phpMailerOAuth->Subject = G::LoadTranslation("ID_MESS_TEST_SUBJECT");
|
||||
$phpMailerOAuth->Body = utf8_encode($this->getMessageBody());
|
||||
$phpMailerOAuth->AddAddress($this->mailTo);
|
||||
$phpMailerOAuth->Send();
|
||||
return $phpMailerOAuth;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user