Как отправить письмо с данными, извлеченными из базы данных с javamail и smtp? - PullRequest
1 голос
/ 10 августа 2010

Я хочу отправлять электронные письма на адрес с помощью Java-программы (используя javamail) через 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();
    }

так что после 2 первой записи я нахожусь в письме "ID: 12345" без времени или состояния.

хорошо, я попробовал setContent, но все ещеесть такая же проблема.может быть, тип контента является причиной (я помещаю текст / простой текст)?

спасибо за вашу помощь

1 Ответ

1 голос
/ 19 января 2014

Я использую объект DataHandler в своей собственной реализации этой функции, которая уже давно запущена в производство. Поэтому я сначала создаю обработчик данных, передающий текст письма, а затем устанавливаю его в качестве обработчика данных сообщения:

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

Вы должны также указать кодировку текста, как в моем примере.

...