tencent cloud

Simple Email Service

Introdução do produto
Visão geral
Funcionalidades
Vantagens
Casos de uso
Especificações
Guia de aquisição
Preços
Guia do console
Configuração
Estatísticas
Documentação do SMTP
Guia de envio de e-mail do SMTP
Endereço do serviço do SMTP
Exemplo de chamada para Java
Exemplo de chamada para Go
Envio de e-mail com anexo
Código de erro
Documentação do webhook
Notificação de evento por e-mail
Restrições de envio de e-mail
Tipos de anexo
Perguntas frequentes
Introdução
Limite de envio
Funcionalidade de envio
Domínio
Modelo
Verificação e configuração de identidade
IP dedicado
Entrega
Uso de API
Retorno
Pasta de spam
Segurança
Observações importantes
Outros
Fale conosco

Exemplo de chamada para Java

PDF
Modo Foco
Tamanho da Fonte
Última atualização: 2025-08-19 10:27:00
O código de exemplo abaixo é uma demonstração no JDK 1.8:
package org.example;

import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.io.UnsupportedEncodingException;
import java.nio.charset.StandardCharsets;
import java.util.Properties;

public class SampleMail {
private static final String SMTP_HOST = "sg-smtp.qcloudmail.com";
private static final String SMTP_HOST = "465";

public static void main(String[] args) {
// Configure os atributos de ambiente para envio de e-mail
final Properties props = new Properties();
// smtps indica TLS implícito, correspondente à porta 465. Caso contrário, é a porta 587, TLS explícito
props.put("mail.transport.protocol", "smtps");
// Indique que o SMTP é usado para enviar o e-mail, o que requer autenticação
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.host", SMTP_HOST);
// Se o SSL for usado, remova a configuração de uso da porta 25 e execute a seguinte configuração:
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.socketFactory.port", SMTP_PORT);
props.put("mail.smtp.port", SMTP_PORT);
// Conta do remetente. Digite o endereço do remetente configurado no console, como xxx@xxx.com
props.put("mail.user", "xxx@xxx.com");
// A senha que precisa ser fornecida quando o serviço SMTP for acessado (selecione o endereço do remetente no console para configurar)
props.put("mail.password", "XXXX");
props.setProperty("mail.smtp.socketFactory.fallback", "false");
props.put("mail.smtp.ssl.enable", "true");
//props.put("mail.smtp.starttls.enable","true");
// Crie as informações de autorização para autenticação do SMTP
Authenticator authenticator = new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
// Usuário e senha
String userName = props.getProperty("mail.user");
String password = props.getProperty("mail.password");
return new PasswordAuthentication(userName, password);
}
};
// Crie a sessão de e-mail com os atributos de ambiente e informações de autorização
Session mailSession = Session.getInstance(props, authenticator);
// mailSession.setDebug(true);
//UUID uuid = UUID.randomUUID();
//final String messageIDValue = "<" + uuid.toString() + ">";
// Crie a mensagem de e-mail
MimeMessage message = new MimeMessage(mailSession) {
//@Override
//protected void updateMessageID() throws MessagingException {
// Defina o valor personalizado de `Message-ID`
//setHeader("Message-ID", messageIDValue);
//}
};
try {
// Defina o endereço de e-mail e o nome do remetente. Aqui, digite o endereço do remetente configurado no console (que deve ser o mesmo do `mail.user` acima), como xxx@xxx.com. O nome pode ser personalizado
InternetAddress from = new InternetAddress("xxx@xxx.com", "test");
message.setFrom(from);
// (Opcional) Defina o endereço de resposta
// Address[] a = new Address[1];
// a[0] = new InternetAddress("***");
// message.setReplyTo(a);
// Defina o endereço de e-mail do destinatário, como yyy@yyy.com
InternetAddress to = new InternetAddress("xxx@xxx.com");
message.setRecipient(MimeMessage.RecipientType.TO, to);
// Se o e-mail for enviado para vários destinatários ao mesmo tempo, substitua as duas linhas acima pelo seguinte (devido às restrições de alguns sistemas de e-mail, recomendamos que você tente enviar o e-mail para um destinatário de cada vez; além disso, o e-mail pode ser enviado para até 50 destinatários por vez):
//InternetAddress[] adds = new InternetAddress[2];
//adds[0] = new InternetAddress("xxx@xxx.com");
//adds[1] = new InternetAddress("xxx@xxx.com");
//message.setRecipients(Message.RecipientType.TO, adds);

// Defina o assunto do e-mail
message.setSubject("Test email");
message.setHeader("Content-Transfer-Encoding", "base64");
// Defina o tipo de corpo do e-mail: `text/plain` (plain text) or `text/html` (HTML document)
message.setContent("<!DOCTYPE html>\\n<html>\\n<head>\\n<meta charset=\\"utf-8\\">\\n<title>hello world</title>\\n</head>\\n<body>\\n " +
"<h1>My first heading</h1>\\n <p>My first paragraph.</p>\\n</body>\\n</html>", "text/html;charset=UTF-8");
// Envie o e-mail
Transport.send(message);
} catch (MessagingException | UnsupportedEncodingException e) {
String err = e.getMessage();
err = new String(err.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8);
System.out.println(err);
}
}

}

Envio de anexo

package org.example;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.*;
import java.io.UnsupportedEncodingException;
import java.nio.charset.StandardCharsets;
import java.util.Properties;
import java.util.UUID;

public class SampleMailAttach {
private static final String SMTP_HOST = "sg-smtp.qcloudmail.com";
private static final String SMTP_HOST = "465";

public static void main(String[] args) {
// Configure os atributos de ambiente para envio de e-mail
final Properties props = new Properties();
// smtps indica TLS implícito, correspondente à porta 465. Caso contrário, é a porta 587, TLS explícito
props.put("mail.transport.protocol", "smtps");
// Indique que o SMTP é usado para enviar o e-mail, o que requer autenticação
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.host", SMTP_HOST);
// Se SSL for usado, remova a configuração de uso da porta 25 e execute a seguinte configuração:
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.socketFactory.port", SMTP_PORT);
props.put("mail.smtp.port", SMTP_PORT);
// Conta do remetente. Digite o endereço do remetente configurado no console, como xxx@xxx.com
props.put("mail.user", "xxx@xxx.com");
// A senha que precisa ser fornecida quando o serviço SMTP for acessado (selecione o endereço do remetente no console para configurar)
props.put("mail.password", "XXXX");
props.setProperty("mail.smtp.socketFactory.fallback", "false");
props.put("mail.smtp.ssl.enable", "true");
//props.put("mail.smtp.starttls.enable","true");
// Crie as informações de autorização para autenticação SMTP
Authenticator authenticator = new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
// Usuário e senha
String userName = props.getProperty("mail.user");
String password = props.getProperty("mail.password");
return new PasswordAuthentication(userName, password);
}
};
// Crie a sessão de e-mail com os atributos de ambiente e informações de autorização
Session mailSession = Session.getInstance(props, authenticator);

UUID uuid = UUID.randomUUID();
final String messageIDValue = "<" + uuid.toString() + ">";
// Crie a mensagem de e-mail
MimeMessage message = new MimeMessage(mailSession) {
@Override
protected void updateMessageID() throws MessagingException {
// Defina o valor personalizado de `Message-ID`
setHeader("Message-ID", messageIDValue);
}
};
try {
// Defina o endereço de e-mail e o nome do remetente. Aqui, digite o endereço do remetente configurado no console (que deve ser o mesmo do `mail.user` acima). O nome pode ser personalizado, como test
InternetAddress from = new InternetAddress("xxx@xxx.com", "test");
message.setFrom(from);
// (Opcional) Defina o endereço de resposta
Address[] a = new Address[1];
a[0] = new InternetAddress("xxx@xxx.com");
message.setReplyTo(a);
// Defina o endereço de e-mail do destinatário, como yyy@yyy.com
InternetAddress to = new InternetAddress("xxx@xxx.com");
message.setRecipient(MimeMessage.RecipientType.TO, to);
// Se o e-mail for enviado para vários destinatários ao mesmo tempo, substitua as duas linhas acima pelo seguinte (devido às restrições de alguns sistemas de e-mail, recomendamos que você tente enviar o e-mail para um destinatário de cada vez; além disso, o e-mail pode ser enviado para até 50 destinatários por vez):
/*InternetAddress[] adds = new InternetAddress[2];
adds[0] = new InternetAddress("xxx@xxx.com");
adds[1] = new InternetAddress("xxx@xxx.com");
message.setRecipients(Message.RecipientType.TO, adds);*/

// Defina o assunto do e-mail
message.setSubject("Test email");
// Envie o anexo. O tamanho total da mensagem não excede 10M, crie uma parte da mensagem
BodyPart messageBodyPart = new MimeBodyPart();
// Corpo da mensagem: `text/plain` (plain text) or `text/html` (HTML document)
messageBodyPart.setText("<!DOCTYPE html>\\n<html>\\n<head>\\n<meta charset=\\"utf-8\\">\\n<title>hello world</title>\\n</head>\\n<body>\\n " +
"<h1>My first heading</h1>\\n <p>My first paragraph.</p>\\n</body>\\n</html>");
messageBodyPart.setHeader("Content-Type", "text/plain;charset=utf-8");
// Crie a mensagem de várias partes
Multipart multipart = new MimeMultipart();
// Defina a parte da mensagem de texto
multipart.addBodyPart(messageBodyPart);
// Parte do anexo
messageBodyPart = new MimeBodyPart();
// Defina o caminho do arquivo anexo
String filename = "/Users/aaa/bbb/a.txt";
FileDataSource source = new FileDataSource(filename);
messageBodyPart.setDataHandler(new DataHandler(source));
// Resolva o problema de texto ilegível do nome do anexo em chinês (caminho do arquivo anexado)
String filenameEncode = MimeUtility.encodeText(filename, "UTF-8", "base64");
messageBodyPart.setFileName(filenameEncode);
messageBodyPart.setHeader("Content-Transfer-Encoding", "base64");
messageBodyPart.setHeader("Content-Disposition", "attachment");
messageBodyPart.setHeader("Content-Type", "application/octet-stream;name=\\"" + filenameEncode + "\\"");
multipart.addBodyPart(messageBodyPart);

// Parte do anexo. Vários anexos devem ser divididos em várias partes
BodyPart messageBodyPart1 = new MimeBodyPart();
// Defina o caminho do arquivo anexo
String filename1 = "/Users/aaa/bbb/b.txt";
FileDataSource source1 = new FileDataSource(filename1);
messageBodyPart1.setDataHandler(new DataHandler(source1));
// Resolva o problema de texto ilegível do nome do anexo em chinês (caminho do arquivo anexado)
String filenameEncode1 = MimeUtility.encodeText(filename1, "UTF-8", "base64");
messageBodyPart1.setHeader("Content-Transfer-Encoding", "base64");
messageBodyPart1.setHeader("Content-Disposition", "attachment");
messageBodyPart1.setHeader("Content-Type", "application/octet-stream;name=\\"" + filenameEncode1 + "\\"");
multipart.addBodyPart(messageBodyPart1);

// Envie a mensagem completa com anexos
message.setContent(multipart);
// Código para envio de anexos (fim)
// Envie o e-mail
Transport.send(message);
} catch (MessagingException | UnsupportedEncodingException e) {
String err = e.getMessage();
err = new String(err.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8);
System.out.println(err);
}
}
}

Perguntas frequentes

Como corrigir o erro “No appropriate protocol (protocol is disabled or cipher suites are inappropriate)”?

Localize o arquivo jdk/jre/lib/security/java.security e modifique-o:



Ajuda e Suporte

Esta página foi útil?

comentários