Neste tutorial, veremos como usar a macro sc_call_api para realizar o envio de emails utilizando a API do Mandrill.
Nota: Para usar a API do Mandrill, você deve criar uma conta no site e obter sua chave de acesso. Mais informações no site Mandrill: https://mandrillapp.com/
Criando a aplicação de Controle
1 – Crie uma aplicação do tipo Controle
2 – Devemos criar os campos necessários para o nosso formulário de envio de email.
2.1 – Primeiramente temos os campos de cabeçalho do email
- api_key: Chave de API do Mandrill
- from_email: Email do remetente
- from_name: Nome do remetente
- mail_to: Email do destinatário
- to_cc: Cópia do email para outro destinatário
- to_bcc: Cópia oculta do email para outro destinatário
2.2 – Em seguida temos um campo de seleção do tipo de mensagem e o assunto.
- msg_type: Com este campo, permitimos que o usuário utilize um template de email pré-existente em sua conta do Mandrill, ou que ele possa escrever uma mensagem nova.
Na configuração deste campo, utilize o Tipo de dado “Radio”, e um Lookup de Edição Manual com os valores “template” e “message”.
- subject: O assunto da mensagem. É utilizada para qualquer um dos tipos selecionado.
2.3 – Campos utilizados para seleção de Template.
- template_name: O nome imutável ou slug de um modelo que existe na conta do usuário.
- template_editable: O nome da região editável “mc: edit” para injetar conteúdo no email.
- template_injection: O conteúdo a ser injetado no corpo do email.
2.4 – Campo utilizado para a criação de nova mensagem.
- msg: Campo de edição HTML usado para criar o corpo do email.
3 – Devemos agora, criar um código de controle que esconderá os campos desnecessários de acordo com o tipo de Mensagem que for selecionada, e para isso, criaremos o método hide_fields
Código:
if ({msg_type} == 'template') {
sc_field_display({template_name}, 'on');
sc_field_display({template_editable}, 'on');
sc_field_display({template_injection}, 'on');
sc_field_display({msg}, 'off');
} else {
sc_field_display({template_name}, 'off');
sc_field_display({template_editable}, 'off');
sc_field_display({template_injection}, 'off');
sc_field_display({msg}, 'on');
}
4 – Esta função será chamada em um evento ajax onChange do campo msg_type e também no evento onLoad do formulário.
5 – 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');
$arr_cc = (!empty({to_cc})) ? explodeMail({to_cc}, 'cc') : $arr_cc = array();
$arr_bcc = (!empty({to_bcc})) ? explodeMail({to_bcc}, 'bcc') : $arr_bcc = array();
$arr_merge = array_merge($arr_to, $arr_cc, $arr_bcc);
$txt_no_tags = strip_tags({msg});
$var_profile = ''; // Enter your profile if you have created it on "Tool >> API menu" or leave it blank
$var_config = array( 'settings' => ['gateway' => 'mandrill', 'api_key'=> {api_key}] );
$mandrill = sc_call_api($var_profile, $var_config);
$template_name = {template_name}; // the immutable name or slug of a template that exists in the user's account.
$template_content = array(
// an array of template content to send. Each item in the array should be a struct with two keys - name: the name of the content block to set the content for, and content: the actual content to put into the block
array(
'name' => {template_editable}, // the name of the mc:edit editable region to inject into
'content' => {template_injection} // the content to inject
)
);
$var_msg = array(
'from_email' => {from_email},
'from_name' => {from_name},
'html' => {msg},
'text' => $txt_no_tags,
'to' => $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
);
$async = false;
//$ip_pool = 'Main Pool';
//$send_at = 'example send_at';
if( {msg_type} == 'template' ) {
$retorno = $mandrill->messages->sendTemplate($template_name, $template_content, $var_msg, $async);
}else{
$retorno = $mandrill->messages->send($var_msg, $async);
}
//echo"<pre>";
//print_r($retorno);
//echo"</pre>";
sc_alert({lang_othr_grid_export_email_sent});
Alterando o layout
6 – Em Layout>>Blocos crie um novo bloco e configure de acordo com a imagem abaixo.
7 – Em “Posicionamento dos campos”, organize os campos nos blocos.
8 – Salve e execute a aplicação.
Comente este post