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.
Comente este post