Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / JavaMail и отправка сообщений / 10 сообщений из 10, страница 1 из 1
23.10.2006, 13:46:14
    #34073907
nikoracul
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaMail и отправка сообщений
Подскажите как можно отправить сообщение с вложением в кодировке uuencode?
Формат сообщения должен быть:

заголовки.....
тело сообщения....
begin 666 filename
сам файл в uuencode
end
...
Рейтинг: 0 / 0
23.10.2006, 14:12:48
    #34074013
Kachalov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaMail и отправка сообщений
JavaMail и почитать про MimeBodyPart
...
Рейтинг: 0 / 0
23.10.2006, 15:30:43
    #34074345
nikoracul
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaMail и отправка сообщений
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
 try  {
            Properties props = System.getProperties();
            props.put("mail.smtp.host", SMTPHost);
            props.put("mail.mime.charset","koi8-r");
            
            MimeMessage msg =  new  MimeMessage(Session.getDefaultInstance(props,  null ));
            // Set Mailer
            msg.setHeader("X-Mailer", "JavaMail");
            // Set From
            msg.setFrom( new  InternetAddress(from));
            // Set To
             if  (to !=  null  && to.length() >  0 )
                msg.setRecipients(MimeMessage.RecipientType.TO,  InternetAddress.parse(to, false));
            // Set cc
             if  (cc !=  null  && cc.length() >  0 )
                msg.setRecipients(MimeMessage.RecipientType.CC,  InternetAddress.parse(cc, false));
            // Set subject
             if  ( subject !=  null  && subject.length() >  0  )  msg.setSubject(subject);
             else  msg.setSubject("(no subject)");
            // Set SentDate
            msg.setSentDate( new  Date());
            
             try  {
                    DriverManager.registerDriver( new  oracle.jdbc.driver.OracleDriver());
                    //conn=(oracle.jdbc.driver.OracleConnection)DriverManager.getConnection("jdbc:default:connection:");
                    conn = DriverManager.getConnection("jdbc:oracle:oci8:@bd", "usr", "pasw");
                    pstmt=(OraclePreparedStatement)conn.prepareStatement("select field from table where rownum < 2");
                    pstmt.execute();
                    ResultSet Cur = pstmt.getResultSet();
        
                    attach = BLOB.createTemporary(conn, true, BLOB.DURATION_SESSION);
                    attach = (oracle.sql.BLOB) Cur.getBlob( 1 );
                    pstmt.close();
                }  catch (SQLException e) { }
            
            msg.addHeader("Content-Disposition"," attachment; Filename=\""+attachmentFileName+"\"");
            msg.addHeader("Content-transfer-encoding","uuencode");         
            
            OutputStream out = MimeUtility.encode(attach.getBinaryOutputStream(),"uuencode");                        
                     
            String BufMsg =  null ;
            BufMsg = "begin 666 " + attachmentFileName + "\r\n";
            BufMsg = BufMsg + out.toString() + "\r\n";
            BufMsg = BufMsg + "'" + "\r\n" + "end";  
            
            msg.setText(BufMsg);
		
	 	Transport.send(msg);
Письмо приходит. Но вместо вложения строчка - com.sun.mail.util.UUEncoderStream@1e67e6a
...
Рейтинг: 0 / 0
23.10.2006, 16:25:27
    #34074595
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaMail и отправка сообщений
Ты получил поток OutputStream out, после чего в строку записываешь его out.toString(). Он тебе и пишет то, что этот метод возвращает. Поток надо прочитать .
...
Рейтинг: 0 / 0
23.10.2006, 16:31:51
    #34074629
Kachalov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaMail и отправка сообщений
Код: plaintext
1.
2.
BodyPart part= new  MimeBodyPart(attach.getBinaryOutputStream());
msg.addBodyPart(part);
- не надо добавлять файл как текст, кодирование производится автоматически
...
Рейтинг: 0 / 0
23.10.2006, 17:03:14
    #34074752
nikoracul
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaMail и отправка сообщений
Неа. Так не катит. Оно даже не компилится. А как прочитать OutputStream поток?
...
Рейтинг: 0 / 0
23.10.2006, 18:14:20
    #34074999
Kachalov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaMail и отправка сообщений
nikoraculОно даже не компилится
- согласен, облажался. Наверное, удобней всего будет использовать библиотеку Jakarta Email , и использовать такую конструкцию:
Класс MultiPartEmail
метод attach(javax.activation.DataSource ds, java.lang.String name, java.lang.String description)
как DataSource передать объект типа ByteArrayDataSource
...
Рейтинг: 0 / 0
23.10.2006, 18:17:26
    #34075006
Kachalov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaMail и отправка сообщений
nikoraculА как прочитать OutputStream поток?
- читать надо из InputStream-а:
Код: plaintext
1.
InputStream in=Cur.getBinaryStream("field");
...
Рейтинг: 0 / 0
24.10.2006, 11:23:47
    #34076285
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaMail и отправка сообщений
nikoraculА как прочитать OutputStream поток?
Извиняюсь, надо не читать его, а в него писать. Может, не то, что тебе надо, но примерно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Blob blob = Cur.getBlob( 1 );
String attachmentFileName = ...;
...
msg.addHeader("Content-Disposition", " attachment; Filename=\"" + attachmentFileName + "\"");
msg.addHeader("Content-transfer-encoding", "uuencode");

ByteArrayOutputStream out =  new  ByteArrayOutputStream();
OutputStream encodeOut = MimeUtility.encode(out, "uuencode");
InputStream blobIn = blob.getBinaryStream();
 int  length;
 byte [] buf =  new   byte [ 8192 ];
 while  ((length = blobIn.read(buf)) != - 1 ) {
  encodeOut.write(buf,  0 , length);
}
encodeOut.close();

msg.setText( new  String(out.toByteArray()));
...
Рейтинг: 0 / 0
24.10.2006, 12:13:18
    #34076496
nikoracul
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaMail и отправка сообщений
Да !!!!!!!!!!!!!!!!!!!! Это то что надо !!!!!!!!!!!!!!! Я понял свои ошибки :) Большое спасибо.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / JavaMail и отправка сообщений / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]