2010-08-10 4 views
1

Je veux envoyer des emails à une adresse avec un programme java (en utilisant javamail) via smtp. En fait, il envoie les courriels à la destination. le problème est le corps de l'email n'est pas envoyé complètement chaque fois. Considérant que le corps de mon courrier est extrait d'une base de données. voici mon code:comment envoyer un mail avec des données extraites d'une base de données avec javamail et smtp?

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(); 
    } 

donc après 2 premier enregistrement, je l'ai dans le courrier « ID: 12345 » sans le temps ou l'état.

bien j'ai essayé setContent mais j'ai toujours le même problème. peut-être le type de contenu est la cause (je mets du texte/plaine)?

Merci pour votre aide

+0

Pourriez-vous donner un exemple de ce à quoi ressemble le corps du message que vous recevez? Est-ce tronqué? Est-ce qu'il manque? – Stroboskop

+0

Oh désolé. Tu l'as fait. – Stroboskop

+0

Première estimation: essayez sans les sauts de ligne. Ensuite, essayez avec des sauts de ligne mais sans les deux-points (':') – Stroboskop

Répondre

1

J'utilise un objet DataHandler dans ma propre mise en œuvre de cette fonction, qui a été en cours d'exécution dans la production pendant un certain temps. donc je suis créer un gestionnaire de données passant dans le texte de courrier électronique et puis définissez que le gestionnaire de données du message:

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

Vous devez également spécifier un encodage de texte comme cela se fait dans mon exemple.

Questions connexes