O Java Mail é uma ferramenta que usa contas de email existentes para enviar e -mails. Por exemplo, registro uma conta de email no NetEase. Através do controle do Java Mail, não posso fazer login na caixa de correio NetEase pessoalmente, para que o programa possa usar automaticamente a caixa de correio da NetEase para enviar emails. Esse mecanismo é amplamente utilizado na ativação do registro e no envio de spam.
O processo geral de envio do Java Mail é o seguinte:
1. Construa uma classe específica herdada a partir de javax.mail.authenticator e substitua o método getPasswordAuthentication () dentro. Esta classe é usada como verificação de login para garantir que você tenha o direito de enviar e -mails para esta caixa de correio.
2. Crie um arquivo de propriedades, que armazena parâmetros como o endereço do servidor SMTP.
3. Crie um javax.mail.Session através do arquivo de propriedades construídas e da classe de concreto javax.mail.authenticator. A criação de uma sessão é equivalente a fazer login no endereço de email. O resto é naturalmente um novo email.
4. Para construir o conteúdo do email, geralmente é um objeto javax.mail.internet.mimemessage e especifique o remetente, destinatário, sujeito, conteúdo etc.
5. Use a classe de ferramentas javax.mail.Transport para enviar e -mails.
Abaixo está o código que encapsulei e os comentários também são bastante detalhados.
1. Primeiro, é uma classe específica herdada de javax.mail.authenticator. O método getPasswordAuthentication () é criar um objeto PasswordAthentication e retorná -lo, o que é um pouco confuso para entender as intenções de design do Java Mail. Pode ser que Javax.mail.authenticator nos fornece medidas de verificação adicionais para garantir a segurança.
pacote com.mzule.simplemail; importar javax.mail.authenticator; importar javax.mail.passwordAuthentication; /** * Verificação de login da caixa de correio do servidor * * @author mzule * */public class MailAuthenticator estende o autenticator {/** * nome de usuário (caixa de correio de login) */nome de string privado; / *** Senha*/ senha de sequência privada; / *** Inicialize a caixa de correio e senha** @Param UserName Mailbox* @param Senha senha*/ public MailAuthenticator (Nome de usuário da String, String senha) {this.username = nome de usuário; this.password = senha; } String getPassword () {return senha; } @Override Protected PasswordAuthentication getPasswordAuthentication () {Return New PasswordAuthentication (nome de usuário, senha); } String getUserName () {return userName; } public void setPassword (string senha) {this.password = senha; } public void setUserName (string userName) {this.username = nome de usuário; }}2. Classe de envio por e -mail , as etapas restantes são implementadas nesta classe. O SimpleMemail no código é um pojo que encapsula o assunto e o conteúdo do email. Sinto que não é apropriado incluir tópico e conteúdo em um parâmetro de método, então sobrecarreguei esse método. Além disso, porque os endereços do servidor SMTP da maioria das caixas de correio podem ser calculados por endereços de email. Por simplicidade, um construtor que não requer um endereço de servidor SMTP é fornecido.
pacote com.mzule.simplemail; importar java.util.list; importar java.util.properties; importar javax.mail.messagingException; importar javax.mail.session; importar javax.mail.Transport; importar javax.mail.internet.addressexception; import javax.mail.internet.internetddress; import.mail.internet.memessage; /*** O remetente de correio simples, pode ser enviado em uma única ou massa. * * @author mzule * */public classe simplemailsender {/** * Arquivo de props para envio de correio */Propriedades transitórias finais privadas Props = System.getProperties (); / *** Verificação de login do servidor de email*/ Authenticator de correio transitório privado; / ** * Sessão de e -mail */ sessão de transiente privado; /** * Initialize the mail sender* * @param smtpHostName * SMTP mail server address* @param username * Username (address) for sending mail * @param password * Password for sending email*/ public SimpleMailSender(final String smtpHostName, final String username, final String password) { init(username, password, smtpHostName); } /*** Inicialize o remetente de email** @param nome de usuário* nome de usuário (endereço) do email enviando emails e use -o para resolver o endereço do servidor SMTP* @param senha* senha para enviar email* /public SimpleMailSender (string de strings), o nome da string final do e -mail. + nome de usuário.split ("@") [1]; init (nome de usuário, senha, smtpHostName); } / ** * Inicialização * * @param nome de usuário * nome de usuário (endereço) para enviar o email * @param senha * senha * @param smtphoStName * SMTP Endereço do host * / private void init (string userName, string senha, string smtpHostname) {// Initialize Props Props. props.put ("Mail.smtp.host", smtphoStName); // Verifique o autenticador = novo MailAuthenticator (nome de usuário, senha); // Crie sessão session = session.getInstance (adereços, autenticador); } / ** * Enviar email * * @param receptor * Endereço de email do destinatário * @param Assunto * Assunto email * @Param Content * Email Content * @Throws ADDERENCEEXCECTION * @THOWS MessagingException * / public void send (String RENGIENT, MIME MIMES MIMENTAGEM, CONTEÚDO DE OBJETO) LIGURA ADENDEREXCECTIONSCECTIONCECTIONCECCOMCEMEMEM (// Criar MIME MAIL MIMEMESSAGEM; // Definir mensagem do remessamento do remessor.setFrom (new InternetAddress (autenticator.getUserName ())); // Definir Message.setRecipient (receptorype.to, novo internetddress (destinatário)); // Definir Message.SetSubject (sujeito); // defina a mensagem content message.setContent (content.toString (), "text/html; charset = utf-8"); // Enviar transport.send (mensagem); } / ** * E -mail em massa * * @param receptores * RECENCIENTES * @param Assunto * Assunto * @Param Content * content * @Throws Abrexception * @Throws MessagingException * / public void send (list <string> Receptores, String Assunto, conteúdo do objeto) lança ADepedException, MessagingException {// Crie Mime Mail Mail Final Mimemessage, // Defina o remessamento do remetente.SetFrom (new InternetAddress (autenticator.getUserName ())); // Defina o destinatário final int num = receptores.size (); InternetAddress [] endereços = novo InternetDdress [num]; for (int i = 0; i <num; i ++) {endereços [i] = new InternetAddress (recepcients.get (i)); } message.setRecipients (receptorype.to, endereços); // Defina a mensagem do tópico.SetSubject (sujeito); // Defina a mensagem de conteúdo de email.setContent (content.toString (), "text/html; charset = utf-8"); // Enviar transport.send (mensagem); } / ** * Enviar email * * @param receptor * Endereço de email do destinatário * @param email * objeto de email * @throws endereçoexception * @Throws MessagingException * / public void send (RECENCEIRO DO STRING, simplêmico e correio) lança endereço, MessagingException {send (RENVIEIENTE, MAIL.GETSUSCJOTCOTJOT (), Mail.getContent (); } / ** * email em massa * * @param receptores * destinatários * @param email * objeto de email * @throws endereçoexception * @throws MessagingException * / public void send (list <string> recepcients, simplemail email) lança endereço, mail.getContent, MessagingException {send (envio de email.getsjectject (), Mail.getContent (); }}3. Chamar o remetente da caixa de correio acima pode construir uma classe de fábrica . A classe de fábrica pode encapsular o processo de criação, por isso se torna muito conveniente obter o nome de usuário da caixa de correio lendo o arquivo de configuração. O código a seguir foi escrito quando eu estava escrevendo o modo Observador e apenas demonstrou brevemente a classe de fábrica.
pacote com.mzule.dp.observer.factory; importar com.mzule.dp.observer.constant.mailsendertype; import com.mzule.simplemail.simplemailsender; /*** Factory Outbox** @Author mzule**/public class MailSenderFactory {/*** Caixa de correio de serviço*/private Static SimpleMailSender Servicess = NULL; / *** Obtenha caixa de correio** @param Tipo de caixa de correio Tipo* Caixa de correio @return que corresponde ao tipo*/ public static simplemailsender getSender (MailSenderType Type) {if (type == MailSenderType.Service; } retornar serviços; } retornar nulo; }}4. Envie email ou o código na demonstração do modo de observador, hein.
pacote com.mzule.dp.observer.observer; importar java.util.ArrayList; importar java.util.list; importar java.util.observable; importar java.util.observable; importar java.util.observable; importar javax.mil.merver; import javax.mail.messagingException; com.mzule.dp.observer.constant.mailsendertype; importar com.mzule.dp.observer.factory.mailsenderFactory; importar com.mzule.dp.observer.po.product; import com.mzule.simplemail.simplemailsender; classe pública ProductPriceObServer implementa observador {@Override public void update (obsertable obj, objeto arg) {produto produto = null; if (obj instanceOf Product) {Product = (Product) obj; } if (arg instanceof float) {float preço = (float) arg; Flutuador diminuição = produto.getprice () - preço; if (diminuição> 0) {// Envie email SimpleMailSender SMS = MailSenderFactory .GetSender (MailSenderType.Service); List <String> receptores = novo ArrayList <String> (); destinatários.add ("[email protected]"); destinatários.add ("[email protected]"); tente {for (RECENDIENTE DE STRING: destinatários) {sms.send (destinatário, "Mudança de preço", "itens que você presta atenção a" + productName () + "o preço foi reduzido, de" + product.getprice () + "yuan para" + preço + "yuan, o declínio. }} catch (endereço (E.) {e.printStackTrace (); } catch (MessagingException e) {E.PrintStackTrace (); }}}}} 5. Verifique se o email foi enviado com sucesso.
O exposto acima é todo o processo de envio de e -mails de Java, e espero que seja útil para o aprendizado de todos.