Posielanie emailov a J2EE
Posielanie e-mailov z java aplikácie nie je určite žiadna veda a nepochybne už mnoho vývojárov takúto funkcionalitu vo svojej aplikácii implementovalo. Samotné posielanie s využitím JavaMail API sa dá nájsť a naimplementovať doslova za pár minút. Čo ak ale potrebujeme mať aplikáciu jednoducho konfigurovateľnú alebo potrebujeme použiť zabezpečené pripojenie k mailovému serveru? Ak je aplikácia nasadená v aplikačnom serveri GlassFish, k dispozícii máme všetko čo potrebujeme. Stačí len vedieť ako na to.
Konfigurácia cez webové administrátorské rozhranie
Cez menu sa treba dostať cez “Resources > JavaMail Sessions > New”.
V editore pre session sa nachádzajú nasledovné polia:
- JNDI Name: názov zdroja
- Mail Host: adresa mailového servera
- Default User:používateľ
- Default Sender Address: defaultnúe-mailovú adresu používateľa
- Store Protocol: Poštový Protokol pop3 alebo imap
- Store Protocol Class: v prípade imap-u bude trieda com.sun.mail.imap.IMAPStore
- Transport Protocol: smtp alebo smtps.
- Transport Protocol Class: v prípade smtps to bude com.sun.mail.smtp.SMTPSSLTransport.
Ak je potrebné nastaviť aj port či heslo, treba ich zadať cez „Additional Properties“. Takto potom vyzerá konfigurácia JavaMail Session priamo v domain.xml:
<mail-resource transport-protocol-class="com.sun.mail.smtp.SMTPSSLTransport" host="smtp.mail.swan.sk" jndi-name="mail/4q" transport-protocol="smtps" from="mail@4q.sk" user="mail@4q.sk"> <property name="mail-smtps-port" value="465"></property> <property name="mail-smtps-auth" value="true"></property> <property name="mail-smtps-password" value="SrdmzA3?r"></property> </mail-resource>
Pridanie certifikátu do TrustStoru Glassfishu
Ak chcete používať zabezpečený prístup, je potrebné pridať aj certifikát emailového servera do TrustStore aplikačného servera (v našom prípade Glassfish 4.1). Ako na to?
- Stiahnite certifikát mailového servera napr. pomocou InstallCert:
java -jar InstallCert.jar smtp.mail.swan.sk:465
- Po výbere certifikátu sa vytvorí v aktuálnom adresári súbor jssecacerts. Vyexportujte certifikát:
keytool -export -alias smtp.mail.swan.sk-1 -keystore jssecacerts -file swan_cert.cer -storepass changeit
- Vznikne súbor swan_cert.cer. Pridajte certifikát do TrustedStore GlassFish servera:
keytool -import -alias smtp.mail.swan.sk-1 -file swan_cert.cer -keystore /opt/glassfish/prod/glassfish/domains/domain1/config/cacerts.jks -storepass changeit
Posielanie e-mailu z kódu
A teraz nám už nič nebráni odoslať email v rámci vyvíjanej aplikácie. Takto by mohol vyzerať príklad zdrojového kódu:
Context initCtx = new InitialContext(); Session mailSession = (Session) initCtx.lookup(“mail/4q“); Message message = new MimeMessage(mailSession); recipients = InternetAddress.parse(mailAddresses, false); message.setRecipients(RecipientType.TO, recipients); message.setSubject(fileName); BodyPart textMessageBody = new MimeBodyPart(); textMessageBody.setText("Toto je automatický email."); from = new InternetAddress(mailSession.getProperty("mail.from")) message.addFrom(new InternetAddress[]{from});
Pridanie prílohy do odosielaného emailu
MimeBodyPart attachmentBody = new MimeBodyPart(); DataSource source = new ByteArrayDataSource(pdf, "application/pdf"); attachmentBody.setDataHandler(new DataHandler(source)); attachmentBody.setFileName(fileName + ".pdf"); Multipart multipart = new MimeMultipart(); multipart.addBodyPart(textMessageBody); multipart.addBodyPart(attachmentBody); message.setContent(multipart); message.setSentDate(new Date()); Transport.send(message);