Aspose.Email  para C++

Enviar e-mail C++

Como usar C++ e SMTP para enviar e-mails com anexo ou iCalendar

  Download grátis julgamento

Como regra geral, o protocolo SMTP é usado para enviar mensagens de e-mail. Você precisa acessar um servidor SMTP para enviar uma mensagem. Você precisa encontrar o endereço do servidor SMTP na rede, determinar a porta e o tipo de criptografia, login e método de autorização. Alguns provedores de e-mail também exigem que você habilite o acesso ao servidor SMTP nas configurações da sua conta. Além disso, se você não se sentir confortável em implementar a autorização OAuth em seu software, tente criar uma senha separada para o aplicativo nas configurações da sua conta.

Então, se você fez todo o trabalho preparatório, é hora de começar a enviar mensagens. Você pode usar a biblioteca Aspose.Email para C++ para isso. Considere o exemplo mais simples:

auto smtpClient = MakeObject<SmtpClient>(u"smtp.gmail.com", u"login", u"password", SecurityOptions::SSLAuto);
smtpClient->Send(u"login@gmail.com", u"to@gmail.com", u"subject", u"body");

Use essa opção se quiser enviar um e-mail de texto simples.

Envie e-mails com anexos usando C++

Se você precisar enviar uma mensagem de e-mail complexa usando C ++, a classe MailMessage definitivamente será útil. Por exemplo, para enviar uma mensagem semelhante à anterior:

auto message = MakeObject<MailMessage>(u"login@gmail.com", u"to@aspose.com", u"subject", u"body");
smtpClient->Send(message);

A classe MailMessage é uma ótima ferramenta. Ele permite que você envie mensagens armazenadas nos formatos de arquivo EML e MSG (Outlook Message Format). Você também pode usar esse formato para enviar anexos ou até mesmo objetos do iCalendar para configurar ou confirmar a participação. O MailMessage permite que você ajuste sua lista de destinatários, destinatários Cc e Bcc. Você pode enviar um e-mail com marcação HTML. Você também pode marcar a mensagem com vários sinalizadores antes de enviá-la, adicionar metadados, criptografá-la etc.

Por que as pessoas escolhem o Aspose.Email para C ++ para enviar e-mails?

Sim, o Aspose.Email para C ++ não é apenas um utilitário para enviar mensagens de e-mail. Essa é uma solução abrangente que fornece suporte abrangente para uma variedade de tarefas relacionadas ao envio, recebimento, armazenamento e processamento de e-mails. E você pode ter certeza de que, ao realizar essas tarefas, não se deparará com as limitações da biblioteca. Estamos estudando esse tópico há muitos anos e estamos constantemente expandindo sua funcionalidade.

Você provavelmente já se deparou com pequenas bibliotecas que surgiram há relativamente pouco tempo. Eles resolvem de forma fácil e natural um problema simples que muitos usuários enfrentam. Mas assim que você se afasta um pouco, percebe que, ao continuar usando essa biblioteca despretensiosa, você é forçado a cercar constantemente muletas, alguns módulos para contornar as restrições da biblioteca, adaptadores projetados para fazer amizade com sua pequena biblioteca com outra pequena biblioteca, etc. E agora, sua pequena solução bacana não é mais tão bacana. Além disso, você o envia para o servidor, onde ele dá um tiro no próprio pé de forma regular e consistente, porque ninguém testou esse zoológico de muletas e integrações antes de você. E não importa o quanto você tente, mais cedo ou mais tarde você ainda se deparará com as limitações dessa biblioteca. E você tem que procurar algo novo. Então, quando se trata de trabalhar com e-mail, você pode querer considerar o Aspose.Email para C++!

Oferecemos a você não apenas um cliente para trabalhar com SMTP. Primeiro, está longe de ser o único protocolo para enviar e-mails com C++. Com nosso produto, você pode enviar e-mails usando o Exchange EWS e o Microsoft Graph!

Já falamos sobre as possibilidades do MailMessage neste artigo. Mas essa está longe de ser a única ferramenta para preparar cartas para envio. Você pode:

  • gerar cartas a partir de um modelo usando TemplateEngine;
  • descompacte os contêineres com letras, graças ao suporte dos formatos OST, PST e MBOX;
  • baixe cartas da caixa de correio usando o suporte dos protocolos IMAP, POP3, Exchange EWS e WebDAV, bem como do Microsoft Graph;
  • converta e-mails de um formato para outro.

Você pode receber facilmente uma carta usando o protocolo Exchange Ews. Ele estará no formato MAPI. Mas você pode facilmente convertê-lo para o formato EML, o que permitirá enviá-lo posteriormente via protocolo SMTP. Ao mesmo tempo, você pode alterar a lista de destinatários ou o remetente da carta a qualquer momento.

Como funciona o envio de um e-mail usando C++ e SMTP?

Configuração SMTP

No momento em que você cria uma instância da classe SmtpClient, nada de especial acontece. Você simplesmente especifica o número de configurações que permitirão que você se conecte a um servidor SMTP no futuro para enviar mensagens. Toda a mágica acontece na primeira chamada para o send método. O que está acontecendo neste momento?

Na verdade, tudo depende das configurações que você especificou. Vamos considerar várias opções. Digamos que você tenha especificado o host do servidor, mas não tenha especificado a porta e o tipo de criptografia. Nesse caso, o mecanismo de seleção automática de configurações será iniciado. Esse mecanismo consiste em tentativas sucessivas de se conectar ao servidor SMTP usando portas padrão e os algoritmos de criptografia correspondentes. Primeiro, é feita uma tentativa de se conectar ao servidor por meio de um canal criptografado. Mas se falhar, o mecanismo tentará estabelecer uma conexão não criptografada. Se você não quiser usar a versão não criptografada do protocolo, especifique a SecurityOptions.SSL_AUTO configuração. Essa configuração também permite selecionar as configurações do servidor, mas verifica apenas os canais criptografados.

Se foi possível estabelecer uma conexão com o servidor, uma tentativa de autorização será feita. Se a autorização falhar, o código de erro será salvo para o futuro. O matcher tentará se conectar de outras maneiras. A mensagem será enviada se você conseguir se conectar e fazer login. Se a conexão falhar, o usuário receberá um código de erro de autorização (se um tiver sido salvo durante a seleção). Assim, o usuário poderá entender que digitou a senha errada ou cometeu algum outro erro. Se nenhuma das opções de portas e tipos de criptografia couber e nem mesmo conseguirmos fazer a tentativa de autorização, o usuário receberá uma notificação de erro sobre configurações incorretas do servidor.

A propósito, deve-se observar que nosso SmtpClient (como todos os outros clientes de nossa biblioteca) pode se conectar ao servidor SMTP por meio de um proxy. Você também pode especificar as configurações do servidor proxy durante a inicialização.

Autorização do cliente SMTP

O SmtpClient suporta mais do que apenas diferentes métodos de conexão. Ele também oferece suporte a diferentes métodos de autorização. Por exemplo, você pode usar o mecanismo OAuth. Para fazer isso, fornecemos várias ferramentas ao mesmo tempo.

Primeiro de tudo, é TokenProvider. Essa é a classe que contém todos os dados necessários para armazenar e atualizar o token OAuth. Nesse caso, você mesmo deve realizar a autorização do OAuth e salvar todas as informações necessárias recebidas do servidor OAuth. RefreshToken desempenha um papel fundamental aqui. Esse é um token adicional emitido pelo servidor de autorização, junto com o AccessToken. A diferença deles é que o AccessToken, via de regra, é válido somente por um determinado período de tempo. Já o RefreshToken é válido por muito mais tempo, ou mesmo indefinidamente (até que o usuário o revogue). Graças ao RefreshToken, a classe TokenProvider sempre pode atualizar um AccessToken se o último não for mais válido.

Outra opção é a interface ITokenProvider. Nesse caso, você pode não apenas implementar o mecanismo OAuth sozinho, mas também passá-lo para o SmtpClient para que ele mesmo o use conforme necessário.

Deve-se observar que o mecanismo OAuth nem sempre é necessário. Às vezes, é muito mais fácil fazer login com um nome de usuário e senha. E para isso, você não precisa reconfigurar sua conta de e-mail, recusar a autorização de dois fatores, etc. Existe uma solução mais segura - essa é uma senha separada para o aplicativo. Para aproveitar esse recurso, você deve examinar as configurações da sua conta de e-mail. Provavelmente, a senha do aplicativo será gerada automaticamente quando você a configurar em sua conta. Não se esqueça de salvá-lo em algum lugar. Também recomendamos limitar ao máximo as permissões do seu aplicativo durante a configuração. Obviamente, se um invasor obtiver acesso a essa senha, ele não poderá se apropriar de sua conta, mas ainda poderá fazer muitas coisas desagradáveis. E aqui você não pode fazer nada, porque a senha é a única coisa que protege seus dados contra intrusos. Em geral, a ferramenta é muito conveniente, mas diminui a segurança da sua conta, use-a por sua conta e risco.

Envio de e-mail via SMTP com C++

Então, a conexão com o servidor foi estabelecida e a autorização foi bem-sucedida. É hora de enviar cartas. Para enviar, um objeto da classe MailMessage é usado. Tecnicamente, você pode simplesmente passar todos os dados necessários para o método de envio. Mas, na verdade, eles ainda serão coletados no objeto MailMessage. Além disso, graças à capacidade da classe MailMessage de serializar para o formato EML, obtemos o fluxo de dados necessário que pode ser passado para nosso servidor SMTP. Assim, damos ao servidor um comando para enviar uma carta e transferir todo o conteúdo da carta para ela na forma de dados de texto. Se dados binários forem transmitidos na carta, por exemplo, na forma de arquivos anexados, esses dados serão codificados no formato Base64 e os metadados da carta indicarão que o destinatário precisará decodificá-los novamente. O servidor SMTP pode verificar a exatidão da mensagem recebida (por exemplo, verificar o campo FROM com a conta do remetente no servidor), bem como complementar os metadados da mensagem a seu critério. Em seguida, o servidor enviará o e-mail aos destinatários, cuja lista também será obtida dos metadados do e-mail.