|
Программирование >> Oracle
Пакет UTL SMTP и отправка электронной почты 1791 чаться, например, в HTML-документах. MIME-типдля GIF-файла, например, - image/ gif, mime-тип для обычного текстового документа - text/plain, a вложение в формате НТМ1 должно иметь тип text/html. Значение attachmentFileName в данном случае - это не имя существующего файла ОС, который будет вкладываться в сообщение, а имя файла в самом вложении; оно будет выдано адресату сообщения в качестве имени вложения. Вложение передается процедуре фактически как данные типа oracle.sql.BLOB. Теперь переходим к телу функции. Оно начинается с установки свойству mail.smtp.host переданного значения имени SMTP-сервера - средства JavaMail API определяют по этому значению, к какому SMTP-серверу подключаться: 30 31 3 2 33 34 35 38 39 int rc Properties props = System.getProperties(); props.put( mail.smtp.host , SMTPHost) ; Message msg = newMimeMessage(Session.getDefaultInstance(props, null)) ; Затем мы устанавливаем заголовки сообщения. Указывается, кто послал сообщение, кому его переслать, кому слать копии (CC) или скрытые копии (BCC), тема сообщения и дата отправки: 42 43 44 45 46 47 48 49 50 51 52 53 55 56 5 7 58 59 msg.setFrom(new InternetAddress(from)); if (to != null && to.lengthO > 0) msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to, if (cc != null && cc.lengthO > 0) msg.setRecipients(Message.RecipientType.CC, InternetAddress.parse(cc, if (bcc != null && bcc.lengthO > 0) msg.setRecipients(Message.RecipientType.BCC, InternetAddress.parse(bcc, false)) ; false)) ; false)) ; if (subject != null && subject.length() msg.setSubject(subject); elsemsg.setSubject( (no subject) ); msg.setSentDate(new Date()); > 0) Затем мы используем один из двух методов передачи сообщения. Если аргумент attachmentData - не пустой, будем кодировать сообщение с помощью MIME, стандарта, обеспечивающего передачу вложений и других многосекционных документов. Для этого мы создаем несколько частей MIME-текста; в данном случае две: текст сообщения и вложение. Строки 76-78 требуют дополнительного разъяснения. С их помощью 1792 Приложение А обеспечивается передача вложений, переданных как объект типа BLOB. Интерфейс JavaMail изначально не принимает данные типа oracle.sql.BLOB (ведь это универсальный интерфейс). Для отправки вложения в виде объекта типа BLOB необходимо задать метод получения его данных для интерфейса JavaMail. Для этого мы создаем специализированный класс DataHandler, интерфейс которого средства JavaMail смогут вызывать для получения данных вложения. Этот класс (BLOBDataHandIer) реализован как вложенный: 61 62 63 64 65 66 67 68 69 70 71 74 75 76 77 79 80 81 82 83 if (attachmentData != null) MimeBodyPart mbpl = new MimeBodyPart(); mbpl.setText((body != null ? body : )); mbpl.setDisposition(Part.INLINE); MimeBodyPart mbp2 = new MimeBodyPart(); String type = (attachmentType != null ? attachmentType dftMime); String fileName (attachmentFileName != null ? attachmentFileName : dftName); mbp2.setDisposition(Part.ATTACHMENT); mbp2.setFileName(fileName); mbp2.setDataHandler(new DataHandler(newBLOBDataSource(attachmentData, MimeMultipart mp = new MimeMultipart(); mp.addBodyPart(mbpl); mp.addBodyPart(mbp2); msg.setContent(mp); type)) Если же вложения нет, текст сообщения передается очень просто - вызовом setText: 87 88 89 90 91 92 93 94 95 96 98 99 != null ? body.....)); else ( msg.setText((body Transport.send(msg) ; rc = 1; catch (Exception e) e.printStackTraceO ; rc = 0; finally return new oracle.sql.NUMBER(rc); Пакет UTL SMTP и отправка электронной почт1 1793 Теперь рассмотрим вложенный класс, BLOBDataSource. Он реализует универсальный интерфейс для JavaMail API, позволяющий обращаться к данным типа oracle.sql.BLOB. Реализация этого класса очень проста: 101 Вложенный клаоо, реализующий интерфейс DataSource. 102 static class BLOBDataSource implements DataSource 103 { 104 private BLOB data; 105 private String type; 106 107 BLOBDataSource(BLOB data. String type) 108 { 109 this.type = type; 110 this.data = data; 111 } 113 public InputStreamgetInputStream() throws IOException 114 { 115 try 116 { 117 if(data == null) 118 throw new IOException( HeT данных. ); 12 0 return data.getBinaryStreamO; 121 } catch(SQLException e) 122 { 123 throw new 124 IOException( He удалось получить входной поток двоичных -> данных из BLOB. ) ; 125 } 126 } 127 128 public OutputStream getOutputStream() throws IOException 129 { 130 throw new IOException( He удалось это сделать. ); 131 } 132 133 public String getContentType() 134 { 135 return type; 136 } 137 138 public String getName() 139 { 140 return BLOBDataSource ; 141 } 142 } 143 ) 144 / Java created.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |