Tutorial: Usando a API de e-mail com macro sc_send_mail_api

Neste exemplo, veremos como utilizar a macro (sc_send_mail_api) para permitir o envío de emails através de APIs próprias para isto. O usuário final poderá selecionar a API que ele deseja utilizar para realizar o envio: SMTP, Mandrill ou Amazon SES.

Criando a aplicação de Controle

1 – Crie uma aplicação do tipo Controle

2 – Devemos criar os campos necessários para o envio de email. (subject, msg, from_email, from_name, mail_to, to_cc, to_bcc)

Criando os campos de configuração

3 – Vamos criar um novo campo chamado “api_type” que permitirá a seleção da API utilizada. O campo será do tipo “Select” e criaremos um lookup manual.

4 – Cada um dos tipos de API disponibilizados requerem outras informações adicionais de configuração. Vamos criar os campos que deverão preencher estas informações. 

Mandrill: api_key

Amazon SES: api_key, ses_secret, ses_region

SMTP: smtp_server, smtp_port, smtp_user, smtp_password, smtp_protocol

Nota 1: O campo api_key será utilizado tanto para o Mandrill quanto para o Amazon SES.


Nota 2: Utilizaremos um lookup manual no campo smtp_protocol (tipo Select) com os valores SSL ou TLS. 

5 – Devemos agora, criar um código de controle que esconderá os campos desnecessários de acordo com o tipo de API que for selecionada, para isto, criaremos o método hide_fields

hide_fields código:

if ({api_type} == 'smtp') {
    sc_field_display({smtp_server}, 'on');
	sc_field_display({smtp_port}, 'on');
	sc_field_display({smtp_user}, 'on');
	sc_field_display({smtp_password}, 'on');
	sc_field_display({smtp_protocol}, 'on');
	sc_field_display({api_key}, 'off');
	sc_field_display({ses_secret}, 'off');
	sc_field_display({ses_region}, 'off');
} elseif({api_type} == 'mandrill') {
	sc_field_display({smtp_server}, 'off');
	sc_field_display({smtp_port}, 'off');
	sc_field_display({smtp_user}, 'off');
	sc_field_display({smtp_password}, 'off');
	sc_field_display({smtp_protocol}, 'off');
	sc_field_display({api_key}, 'on');
	sc_field_display({ses_secret}, 'off');
	sc_field_display({ses_region}, 'off');
} elseif ({api_type} == 'ses') {
	sc_field_display({smtp_server}, 'off');
	sc_field_display({smtp_port}, 'off');
	sc_field_display({smtp_user}, 'off');
	sc_field_display({smtp_password}, 'off');
	sc_field_display({smtp_protocol}, 'off');
	sc_field_display({api_key}, 'on');
	sc_field_display({ses_secret}, 'on');
	sc_field_display({ses_region}, 'on');
} else {
	sc_field_display({smtp_server}, 'on');
	sc_field_display({smtp_port}, 'on');
	sc_field_display({smtp_user}, 'on');
	sc_field_display({smtp_password}, 'on');
	sc_field_display({smtp_protocol}, 'on');
	sc_field_display({api_key}, 'on');
	sc_field_display({ses_secret}, 'on');
	sc_field_display({ses_region}, 'on');
}

6 – Esta função será chamada em um evento ajax onChange do campo api_type e também no evento onLoad do formulário.

7 – No evento OnValidateSuccess adicionaremos o seguinte código:

function explodeMail($str, $type)
{
   $arr = explode(',', $str);
   $arr_return = [];
   foreach ($arr as $item) {
       $arr_return[] = array(
                               'name'	=> '',
                               'type'	=> $type,
                               'email'	=> $item
                           );
   }
   return $arr_return;
}

$arr_to = explodeMail({mail_to}, 'to');
if ( !empty({to_cc}) ) { $arr_cc = explodeMail({to_cc}, 'cc'); } else {$arr_cc = array();}
if ( !empty({to_bcc}) ) { $arr_bcc = explodeMail({to_bcc}, 'bcc'); } else {$arr_bcc = array();}

$arr_merge		= array_merge($arr_to, $arr_cc, $arr_bcc);
$txt_no_tags	= strip_tags({msg});

if ({api_type} == 'smtp') {
	// SMTP Settings
	$var_config = get_settings_smtp($txt_no_tags, $arr_merge);	
} elseif ({api_type} == 'mandrill') {
	// MANDRILL Settings
	$var_config = get_settings_mandrill($txt_no_tags, $arr_merge);
} elseif ({api_type} == 'ses') {
	// AMAZON SES Settings
	$var_config = get_settings_amazon($txt_no_tags, $arr_merge);
}

//echo "<pre>";
//print_r($var_config);
//echo "</pre>";

sc_send_mail_api($var_config);


sc_alert({lang_othr_grid_export_email_sent});

8 – Devemos criar as funções PHP (get_settings_smtp, get_settings_mandrill, get_settings_amazon) utilizadas no OnValidateSuccess. 

get_settings_smtp($txt_no_tags, $arr_merge):

$var_config = array(
	'settings' => [
			   'gateway'       => 'smtp',
			   'smtp_server'   => {smtp_server},
			   'smtp_port'     => {smtp_port},
			   'smtp_user'     => {smtp_user},
			   'smtp_password' => {smtp_password},
			   'from_email'    => {from_email},
			   'from_name'     => {from_name}
			  ],

	'message' => [
			   'html'          => {msg},
			   'text'          => $txt_no_tags,
			   'to'            => $arr_merge,
			   //'attachments' => array('/var/www/arquivo.txt','/var/www/arquivo2.txt'),
			   'subject'       => {subject}
			  ]
);

return $var_config;

get_settings_mandrill($txt_no_tags, $arr_merge):

$var_config = array(
	'settings' => [
			   'gateway'						=> 'mandrill',
			   'api_key'						=> {api_key},
			   'from_email'						=> {from_email},
			   'from_name'						=> {from_name}
			  ],

	'message' => [
				'html'							=> {msg},
				'text'							=> $txt_no_tags,
				'to'							=> array($arr_merge),			   
				'subject'						=> {subject},
				'important'						=> true,			
				//'attachments'					=> array('/var/www/arquivo.txt','/var/www/arquivo2.txt'),
				//'headers'						=> array('Reply-To' => 'message.reply@example.com'),
				//'track_opens'					=> null,
				//'track_clicks'				=> null,
				'auto_text'						=> null,
				'auto_html'						=> null,
				'inline_css'					=> null,
				//'url_strip_qs'				=> null,
				//'tags'						=> array('password-resets'),
				//'subaccount'					=> 'customer-123',
				//'google_analytics_domains'	=> array('example.com'),
				//'google_analytics_campaign'	=> 'message.from_email@example.com',
				'metadata'						=> array('website' => 'www.scriptcase.net')
		
				// Check another settings at https://mandrillapp.com/api/docs/messages.php.html#method=send
		
			  ]
	);
return $var_config;

get_settings_amazon($txt_no_tags, $arr_merge):

$var_config = array(
	'settings' =>  [
        'gateway'		=> 'ses',
        'region'		=> {ses_region},
        'api_key'		=> {api_key},
        'api_secret'	=> {ses_secret},
        'from_email'	=> {from_email}
    ],
    'message' => [
        'html'          => {msg},
        'text'          => $txt_no_tags,
        'to'            => array($arr_merge),
		//'attachments' => array('/var/www/arquivo.txt','/var/www/arquivo2.txt'),
        'subject'       => {subject}
    ]
);
return $var_config;

9 – Salve e execute a aplicação.

Tutoriais na mesma categoria

Gerenciamento de Arquivos na Nuvem

Alguns dos serviços de armazenamento de dados estão prontos para ler e armazenar com segurança ...

Enviar SMS com a macro sc_send_sms

Neste exemplo, veremos como podemos criar uma aplicação que nos ajuda a enviar mensagens por mei...

Integração com WhatsApp

Para integrar o WhatsApp ao ScriptCase, estaremos utilizando uma API específica chamada Chat...

Enviar multiplos SMS com a macro sc_send_sms

Neste exemplo, veremos como podemos criar uma aplicação que nos ajuda a enviar várias mensagens...

Comente este post