Search

'Java/오류해결'에 해당되는 글 2건

  1. 2016.05.03 JavaMail 로 Gmail 보내기
  2. 2012.05.02 JavaMail 사용시 501 Syntax error 해결방법

JavaMail 로 Gmail 보내기

Java/오류해결 2016. 5. 3. 13:31 Posted by 퓨어레드

메일 보내기

@Override

public void send (String toAddr, String subject, String content)
{
   final BaseSetting baseSetting = settingSv.getBaseSetting ();

   // javamail lib 이 필요합니다.
   class MyAuthentication extends Authenticator
   {
      PasswordAuthentication pa;

      public MyAuthentication ()
      {
         pa = new PasswordAuthentication (baseSetting.getCommonEmail (), baseSetting.getCommonEmailPasswd ());  //ex) ID:cafe24@cafe24.com PASSWD:1234
      }

      public PasswordAuthentication getPasswordAuthentication ()
      {
         return pa;
      }
   }

   String host = baseSetting.getSmtpAddr ();              //smtp mail server
   String from = baseSetting.getCommonEmail ();                  //sender email address
   String to = toAddr;                        //receiver email address

   if (StrLib.isEmptyStr (baseSetting.getSmtpAddr ()) || StrLib.isEmptyStr (baseSetting.getCommonEmail ()) || StrLib.isEmptyStr (baseSetting.getCommonEmailPasswd ()))
      return;;

   Properties props = new Properties ();
   props.put ("mail.smtp.host", host);
   props.put ("mail.smtp.auth", "true");
   props.put ("mail.smtp.port", String.valueOf (baseSetting.getSmtpPort ()));

   if (baseSetting.getSmtpPort () == 997 || baseSetting.getSmtpPort () == 465 || baseSetting.getSmtpPort () == 587)
   {
      props.put ("mail.smtp.socketFactory.port", String.valueOf (baseSetting.getSmtpPort ()));
      props.put ("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
      props.put ("mail.smtp.socketFactory.fallback", "false");
      props.put ("mail.smtp.starttls.enable","true");

      props.put ("mail.smtp.user",baseSetting.getCommonEmail ());
   }

   Authenticator auth = new MyAuthentication ();
   Session sess = Session.getInstance (props, auth);

   try
   {
      Message msg = new MimeMessage (sess);
      msg.setFrom (new InternetAddress (from));
      InternetAddress[] address = {new InternetAddress (to)};
      msg.setRecipients (Message.RecipientType.TO, address);
      msg.setSubject (subject);
      msg.setSentDate (new Date ());

      // Multipart 객체 생성
      MimeMultipart multipart = new MimeMultipart ();

      MimeBodyPart part = new MimeBodyPart ();

      // 부가적인 해더 추가
      /**********************************************************/
      msg.setHeader ("MIME-Version" , "1.0" );
      /**********************************************************/

      // 메세지 Part 추가 S
      /**********************************************************/
      part.setContent (content, "text/html;charset=UTF-8");
      part.removeHeader ("Content-Transfer-Encoding");

      // Encoding 타입 추가..
      /**********************************************************/
      part.addHeader ("Content-Transfer-Encoding", "base64");
      /**********************************************************/

      multipart.addBodyPart (part);
      /**********************************************************/
      // 메세지 Part 추가 E

      msg.setContent (multipart);

      Transport.send (msg);
   }
   catch (MessagingException mex)
   {
      mex.printStackTrace ();
   }
}

'Java > 오류해결' 카테고리의 다른 글

JavaMail 사용시 501 Syntax error 해결방법  (0) 2012.05.02

JavaMail 사용시 501 Syntax error 해결방법

Java/오류해결 2012. 5. 2. 15:00 Posted by 퓨어레드

모든 501 에러 처리 방법은 아니다. Exception 이 아래와 같이

 

javax.mail.MessagingException: 501 Syntax error

 

at com.sun.mail.smtp.SMTPTransport.issueCommand(SMTPTransport.java:1363)
at com.sun.mail.smtp.SMTPTransport.helo(SMTPTransport.java:838)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:375)

 

 

떨어졌을때 해결방법

 

이 문제는 평소에 잘 되던 시스템에서 타 시스템으로 갔을 때 아주 간혹 생기는 문제 -_-;;;;;;;;; 인데;;

완전 초난감 했던 문제이다.. ㅠㅠ... 결국 외국 사이트를 뒤지고 뒤져도.. 원인을 찾을 수 없었는데 ㅠㅠ;;

그나마 검색 신공을 이용하여... SMTPTransport 에 해당 하사는 소스를 찾게 되었다..

 

문제의 부분을 보면

 

private void helo(String domain) throws MessagingException {
	if (domain != null)
		issueCommand("HELO " + domain, 250);
	else
		issueCommand("HELO", 250);
}

 

바로!! 838 라인 때문에 생기는 문제이다.. 다시 말해 SMTP 명령어를 HELO 만 쓰면 501 Syntax 에러가 발생하고

HELO HIHI 이렇게만 써줘도 에러가 안나는데.. 838번 라인을 타게 되는 이유는 domain 이 셋팅이 안되서 였다..!!! 두둥 -_-

이걸 알아내느라 안되는 영어로 외국사이트 까지 뒤진 내가 신기하다.. ㅋㅋ 암튼 해결방법은!!

 

이 문제가 발생했다면.. 가장 먼저 의심해볼것이 바로 컴퓨터 이름이 없거나.. 한글이 섞여있는지 확인한다 ㅠㅠ

 

그렇다.. ㅠㅠ 문제는 컴퓨터 이름이 한글이여서 생긴 문제인것이였다!!!!!!!!!! 두둥.. 코드엔 전혀 문제가 없었던... 것...............

완전.................... 개삽질............ -_- 암튼.. 컴퓨터 이름을 바꾸지 않아도 해결할수 있는 방법도 있다.

 

javamail 관련 property 설정시 mail.smtp.localhost 부분을 추가하는것이다.

 

Properties props = new Properties ();
props.put ("mail.smtp.host", smtpServerAddr);
props.put ("mail.smtp.localhost", smtpServerAddr);
props.put ("mail.debug", "true");
props.put ("mail.smtp.auth", "true");

session = Session.getInstance (props, null);

 

 

 

이러면 해결 된다......................................................................................................................................

사는게 다 그렇지뭐 -_- ㅠㅠ

 

'Java > 오류해결' 카테고리의 다른 글

JavaMail 로 Gmail 보내기  (0) 2016.05.03