2010-08-10 3 views
1

나는 smtp를 통해 자바 프로그램 (javamail 사용)으로 주소로 이메일을 보내고 싶다. 실제로 목적지에 이메일을 보냅니다. 문제는 전자 메일의 본문이 매번 완전히 전송되지 않는다는 것입니다. 내 메일의 본문이 데이터베이스에서 추출되었다고 생각하면됩니다. 여기 내 코드입니다 :javamail 및 smtp를 사용하여 데이터베이스에서 데이터를 추출하여 메일을 보내는 방법은 무엇입니까?

그래서 2 첫 번째 레코드 후, 내가 메일 "ID : 12345"로했습니다
public static void Bmail(Connection conn, String grav, String state) 
    { 
     Statement stmt; 

     try 
     { 
      stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); 

      ResultSet res = stmt.executeQuery("select ID, Time_C from production where name='"+grav +"' and State='"+state+"'"); 

      while(res.next()) 
      {       
       String id=res.getString("1"), tc=res.getString("2"); 
        testmail smtpMailSend = new testmail(); 
       String sub="Alert "+grav+" "+state; 
        String mes=" ID "+id +"\n Stat: "+state +"\n time: "+tc; 
        smtpMailSend.sMail(sub,mes); 
      } 
     } catch(Exception e) 
     { 
      e.printStackTrace(); 
      stmt = null; 
     } 
    } 
public void sMail(String obj,String text)throws MessagingException 
{ 
Properties props = new Properties(); 
    props.put("mail.smtp.host", d_host); 
    props.put("mail.smtp.port", d_port); 
    props.put("mail.smtp.starttls.enable","true"); 
    props.put("mail.smtp.debug", "true"); 
    props.put("mail.smtp.auth", "true"); 
    Authenticator auth = new SMTPAuthenticator(); 
    Session session = Session.getInstance(props, auth); 
    session.setDebug(true); 
    Message msg = new MimeMessage(session); 
    msg.setText(text); 
    msg.setContent(text,"text/plain"); 
    msg.setSubject(obj); 
    msg.setFrom(new InternetAddress(d_email)); 
    msg.addRecipient(Message.RecipientType.TO, new InternetAddress(m_to)); 
    msg.saveChanges(); 
    Transport transport = session.getTransport("smtps"); 
    transport.connect(d_host, d_port, d_uname, d_password); 
    transport.sendMessage(msg, msg.getAllRecipients()); 
    transport.close(); 
    } 

시간이나 상태없이.

글쎄 나는 setContent를 시도했지만 여전히 같은 문제가 있습니다. 어쩌면 콘텐츠 유형이 원인입니다 (나는 text/plain을 넣을 것입니다)? 당신의 도움이

+0

메시지 본문이 어떻게 생겼는지 예를 들려 줄 수 있습니까? 잘 렸어? 실종 됐나요? – Stroboskop

+0

오 죄송합니다. 그랬지. – Stroboskop

+0

첫 번째 추측 : 줄 바꿈없이 시도하십시오. 그런 다음 줄 바꿈을 시도해보십시오. 그러나 콜론 (':')이 없으면 줄 바꿈없이 작동합니다. – Stroboskop

답변

1

나는 꽤 오랫동안 생산에 실행 된이 기능, 내 자신의 구현에서의 DataHandler 객체를 사용하고 있습니다위한

감사합니다. 그래서 내가 먼저 전자 메일 텍스트에 전달하는 데이터 핸들러를 만든 다음 메시지의 데이터 핸들러로한다는 설정 : 내 예에서 수행 될 때

DataHandler messageDataHandler = new DataHandler(notification.getMessage(), "text/plain; charset=\"UTF-8\""); 
msg.setDataHandler(messageDataHandler); 

당신은 또한 텍스트 인코딩을 지정해야합니다.