Introdução
A crescente necessidade de automatizar o envio de comunicações via email, com origem em Salesforce, leva a que numa mesma organização estes envios possam ser feitos no contexto de diversos processos, com diferentes modelos de mensagem e estruturas de destinatários distintas.
Nesse sentido, torna-se determinante encontrar uma solução que seja suficientemente versátil para fazer face a esta multiplicidade de hipóteses, sobretudo nos casos em que elas coexistam. Apesar de existirem algumas formas de automatizar o envio de emails em Salesforce com recurso a soluções no-code, nenhuma delas oferece tantas opções quanto o envio via Apex.
O objectivo deste artigo passa por mostrar algumas das potencialidades do módulo de Outbound Email do Apex, bem como referir alguns métodos que podem ser utilizados para a construção, definição e envio de mensagens de email.
Construção da mensagem
A construção da mensagem inicia-se com a instanciação de um Email object que registará todas as parametrizações e será alvo de envio no final do processo:
O Subject e o Body da mensagem, este último com a possibilidade de ter versões texto e HTML, poderão ser definidos através dos métodos que se seguem:
Em alternativa, e para cobrir os cenários mais comuns, existe também a possibilidade de se recorrer a um template disponível no Salesforce, seja standard ou custom. Para esse efeito, poderá ser utilizado o método renderStoredEmailTemplate da classe Messaging.
Em substituição deste, também podem ser usados os seguintes métodos:
Em qualquer das abordagens devem ser passados como input os seguintes parâmetros:
- templateId – Id do template definido em Salesforce;
- targetObjectId – tipicamente é o Id do registo de uma Lead ou de um Contacto, sendo utilizado para preenchimento de campos no template;
- whatId – tipicamente é o Id do registo de uma Conta ou de uma Oportunidade, sendo utilizado para preenchimento de campos no template.
Definição de destinatários
No que diz respeito à definição de destinatários, estão disponíveis os três tipos habitualmente utilizados (To, Cc e Bcc) e podem ser definidos através dos seguintes métodos, que recebem listas de strings como input:
Remetente
Por defeito, o remetente do email é o user que invoca o método que fará o envio do email. Nesse sentido, no campo From, serão utilizados o nome e o endereço de email que lhe estão associados.
No entanto, é possível alterar este comportamento, desde logo através da parametrização e utilização dos Organization-Wide Email Addresses, onde ficam definidos nomes e endereços de email que podem ser utilizados como remetentes.
Assim, é possível disponibilizar um conjunto de emails que poderão ser utilizados como remetentes, recorrendo ao método setOrgWideEmailAddressId, que receberá como input o Id do Email Address pretendido (objecto OrgWideEmailAddress).
Se o objectivo for apenas definir o nome indicado no remetente, isso também poderá ser feito.
Nos casos em que o remetente deva ser colocado em Bcc deverá ser utilizado o seguinte método:
Parametrizações adicionais
Para definir o endereço de email utilizado quando os destinatários respondem à mensagem deve ser utilizado o seguinte método:
Caso o utilizador que efectua o envio do email tenha definida uma assinatura de email em Salesforce, ela será incluída por defeito na mensagem. Para evitar que isso aconteça, se necessário invocar o método setUseSignature, passando false como input.
Após o envio do email será registada uma Activity associada ao registo referente ao targetObjectId, caso este tenha sido definido. Se esse não for o comportamento pretendido, deverá ser invocado o seguinte método com o input a false:
Envio da mensagem
Para efectuar o envio da mensagem, será necessário invocar o método Messaging.sendEmail, que recebe como input uma lista do tipo Messaging.SingleEmailMessage, permitindo o envio de vários emails em simultâneo, e, opcionalmente, um boleano que permite definir se o processo deve ser abortado caso ocorra um erro no envio de um email (true) ou se deve processar o envio dos restantes (false).
Como output, o método Messaging.sendEmail, recebe o resultado do processo de envio para eventual análise.
Conclusão
Considerando os métodos e funcionalidades referidas neste breve artigo, facilmente se identificam algumas que não se encontram disponíveis em soluções no-code, fazendo do módulo de Outbound Email do Apex uma opção a considerar sempre que seja necessário implementar soluções onde a complexidade assim o justifique.
Através de algumas linhas de código pode ser desenvolvida uma classe onde seja incluído um método para o processamento de emails que, sendo exposto, poderá ser invocado em qualquer contexto. Adicionalmente, esta componente pode ser combinada com a utilização de Custom Metadata onde pode, entre outras coisas, ser registado um mapa de combinações que, por exemplo, permita identificar o template a utilizar em cada circunstância. Deste modo, é possível construir uma solução bastante completa e escalável para casos em que o envio automático de emails tenha um peso significativo na operação e seja caracterizado por especificidades que não sejam cobertas, integralmente, pela utilização de Flows.
Referências
- Salesforce Developer: Outbound Email
- Salesforce Developer: SingleEmailMessage Methods
- Salesforce Developer: Email Class
- Salesforce Developer: Messaging Class
#Salesforce #wordIT #outboundemail #emailleadgeneration #Salesforcepartner