두 가지 JavaMail 메일 보내기 예

4885 단어 javamail
첫 번째 쓰기 방법:
public static void main(String[] args) throws Exception {
		//  :
		Properties props = new Properties();
		props.setProperty("mail.smtp.host", "smtp.163.com");
		props.setProperty("mail.debug", "true");
		props.setProperty("mail.smtp.auth", "true");
		props.setProperty("mail.transport.protocol", "smtp");
		Session session = Session.getInstance(props);
		Message message = new MimeMessage(session);
		message.setFrom(new InternetAddress("[email protected]"));
		message.setText(" ! !");
		Transport transport = session.getTransport();
		transport.connect("smtp.163.com", 25, "[email protected]", "****");
		transport.sendMessage(message, new Address[] { new InternetAddress(
				"[email protected]") });
		transport.close();
    }

 
혹은
   
	public static void main(String[] args) throws Exception {
                                 Properties props = new Properties();
		 props.setProperty("mail.smtp.host", "smtp.163.com");
		 //  
		 props.setProperty("mail.smtp.auth", "true");
		 props.setProperty("mail.debug", "true");

		 // Session stmp 
		 Session session = Session.getDefaultInstance(props,
		 new Authenticator() {
		 protected PasswordAuthentication getPasswordAuthentication() {
		 return new PasswordAuthentication("[email protected]",
		 "*******");
		 }
		 });
		
		 MimeMessage msg = new MimeMessage(session);
		 try {
		 msg.setFrom(new InternetAddress("[email protected]"));
		 msg.addRecipients(Message.RecipientType.TO,
		 "[email protected],[email protected]");
		 msg.setSubject(" -- ", "UTF-8");
		 msg.setSentDate(new Date());
		 msg.setText(" , 。 ", "UTF-8");
		
		 //  
		 // Transport.send(msg,new InternetAddress[]{new
		 // InternetAddress("[email protected]")});
		 Transport.send(msg);
		 } catch (MessagingException e) {
		 e.printStackTrace();
    }		 
 }

 
여기서 javamail Session.getDefaultInstance와 getInstance의 차이점:
 
두 개의 계정을 동시에 사용하려면javamail을 보냅니다. 예를 들어 사용합니다[email protected] 1# 메일 보내기, 사용[email protected]#메일을 보내면 두 개의java를 동시에 만들어야 합니다.mail.Session 객체.하지만 세션을 사용한다면.getDefaultInstance에서 session 객체를 만들면 두 번째 username:[email protected]창설된 세션은 영원히 첫 번째와 같습니다. 왜 그런가요?getDefault Instance는 진정한 단일 모드이며, 그 안에 있는username과password 속성은final형이기 때문에 변경할 수 없습니다.그래서 두 통의 이메일이 모두 원인이라는 것을 알게 될 것이다[email protected] 보내주셨어요.그러니까 이럴 때는javax를 사용해야 돼.mail.Session.getInstance() 메서드를 사용하여 session 객체를 작성합니다.
 
Transport 방법send와sendMessage 사이에는 어떤 차이가 있습니까?send () 방법은 정적 방법으로 직접 사용할 수 있으며 Transport 대상의 실례가 필요하지 않습니다.기본 전송으로 단일 메시지를 보내는 것과 같은 흔하고 간단한 장소에 사용됩니다.내부적으로send() 방법은 메시지의saveChanges() 방법을 먼저 호출합니다.그리고 적당한 새 Transport 대상을 만들고 Transport의connect () 방법을 호출하며 Transport의sendMessage () 방법을 호출하여 실제 메시지를 보내고 Transport의close () 방법을 호출하여 마지막에 Transport 대상의 새로운 실례를 버리고 쓰레기 수집기에서 수집한다.보시다시피 정적send () 편리 (convenience) 방법은 더욱 통용되는 모든 실례sendMessage () 방법의 기초 위에서 세워진 것입니다.응용 프로그램에서sendMessage() 방법을 직접 사용할 수 있는 여러 가지 이유가 있습니다.가장 흔히 볼 수 있는 원인은 단일 연결 기간에 여러 개의 메시지를 보내서 성능을 향상시키거나 수동으로 연결을 관리하여 검증 정보를 제공하기 위해서이다.sendMessage () 방법을 사용할 때 발생하는 가장 흔한 오류는 보낼 메시지에saveChanges () 방법을 호출하는 것을 잊어버리는 것입니다.
 
 
두 번째, 스프링 결합
	public static void main(String[] args) throws AddressException, MessagingException {
		JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
		mailSender.setHost("mail.xinnet.com");
		mailSender.setUsername("*****@xinnet.com");
		mailSender.setPassword("*****");
		Properties prop = new Properties();
		prop.put("mail.debug", "true");
		prop.put("mail.smtp.auth", "true");
		prop.put("mail.smtp.timeout", "25000");
		mailSender.setJavaMailProperties(prop);
		MimeMessage mailMessage = mailSender.createMimeMessage(); 
	                MimeMessageHelper mail = new MimeMessageHelper(mailMessage); 
		mail.setFrom("******@xinnet.com");
		mail.setTo("*****@xinnet.com");
		mail.setSubject("  spring Mail");
		mail.setText("hello!!spring<br/> html Mail",true);
		mailSender.send(mailMessage);
		System.out.println("  .. ");
	}

 
다음 편에는 인터넷에서 찾아온 자바 메일의 흔한 질문들을 붙여 보겠습니다.

좋은 웹페이지 즐겨찾기