Mercurial Hosting > luan
annotate src/luan/modules/mail/SmtpCon.java @ 1175:d6d0bd05ad8c
exit on bind conflict, serve "127.0.0.1" for serve_for_nginx
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Mon, 12 Feb 2018 14:55:28 -0700 |
parents | 1a68fc55a80c |
children | 23e8f93055a4 |
rev | line source |
---|---|
228
7580379cdc79
implement basic mail smtp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
1 package luan.modules.mail; |
7580379cdc79
implement basic mail smtp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
2 |
360
cbb94a7c7a9e
allow mail attachments;
Franklin Schmidt <fschmidt@gmail.com>
parents:
289
diff
changeset
|
3 import java.io.IOException; |
270
b2c20fdcf42a
allow alternative-multipart mail
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
228
diff
changeset
|
4 import java.util.Map; |
273
073044e3ac03
fix mmake.sh and multipart mail
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
270
diff
changeset
|
5 import java.util.HashMap; |
228
7580379cdc79
implement basic mail smtp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
6 import java.util.Properties; |
7580379cdc79
implement basic mail smtp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
7 import javax.mail.Authenticator; |
7580379cdc79
implement basic mail smtp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
8 import javax.mail.PasswordAuthentication; |
7580379cdc79
implement basic mail smtp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
9 import javax.mail.Session; |
7580379cdc79
implement basic mail smtp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
10 import javax.mail.Transport; |
7580379cdc79
implement basic mail smtp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
11 import javax.mail.Message; |
7580379cdc79
implement basic mail smtp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
12 import javax.mail.MessagingException; |
360
cbb94a7c7a9e
allow mail attachments;
Franklin Schmidt <fschmidt@gmail.com>
parents:
289
diff
changeset
|
13 import javax.mail.Part; |
228
7580379cdc79
implement basic mail smtp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
14 import javax.mail.internet.MimeMessage; |
270
b2c20fdcf42a
allow alternative-multipart mail
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
228
diff
changeset
|
15 import javax.mail.internet.MimeMultipart; |
b2c20fdcf42a
allow alternative-multipart mail
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
228
diff
changeset
|
16 import javax.mail.internet.MimeBodyPart; |
228
7580379cdc79
implement basic mail smtp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
17 import luan.Luan; |
7580379cdc79
implement basic mail smtp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
18 import luan.LuanState; |
7580379cdc79
implement basic mail smtp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
19 import luan.LuanTable; |
7580379cdc79
implement basic mail smtp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
20 import luan.LuanException; |
7580379cdc79
implement basic mail smtp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
21 |
7580379cdc79
implement basic mail smtp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
22 |
7580379cdc79
implement basic mail smtp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
23 public final class SmtpCon { |
7580379cdc79
implement basic mail smtp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
24 private final Session session; |
7580379cdc79
implement basic mail smtp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
25 |
289
ae7ae2755b48
improve Mail;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
273
diff
changeset
|
26 public SmtpCon(LuanState luan,LuanTable paramsTbl) throws LuanException { |
575
7c3ad6db8ac3
make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents:
572
diff
changeset
|
27 Map<Object,Object> params = new HashMap<Object,Object>(paramsTbl.asMap(luan)); |
228
7580379cdc79
implement basic mail smtp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
28 Properties props = new Properties(System.getProperties()); |
7580379cdc79
implement basic mail smtp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
29 |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
578
diff
changeset
|
30 String host = getString(params,"host"); |
228
7580379cdc79
implement basic mail smtp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
31 if( host==null ) |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
578
diff
changeset
|
32 throw new LuanException( "parameter 'host' is required" ); |
228
7580379cdc79
implement basic mail smtp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
33 props.setProperty("mail.smtp.host",host); |
7580379cdc79
implement basic mail smtp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
34 |
289
ae7ae2755b48
improve Mail;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
273
diff
changeset
|
35 Object port = params.remove("port"); |
228
7580379cdc79
implement basic mail smtp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
36 if( port != null ) { |
7580379cdc79
implement basic mail smtp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
37 String s; |
7580379cdc79
implement basic mail smtp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
38 if( port instanceof String ) { |
7580379cdc79
implement basic mail smtp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
39 s = (String)port; |
7580379cdc79
implement basic mail smtp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
40 } else if( port instanceof Number ) { |
7580379cdc79
implement basic mail smtp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
41 Integer i = Luan.asInteger(port); |
7580379cdc79
implement basic mail smtp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
42 if( i == null ) |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
578
diff
changeset
|
43 throw new LuanException( "parameter 'port' must be an integer" ); |
228
7580379cdc79
implement basic mail smtp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
44 s = i.toString(); |
7580379cdc79
implement basic mail smtp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
45 } else { |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
578
diff
changeset
|
46 throw new LuanException( "parameter 'port' must be an integer" ); |
228
7580379cdc79
implement basic mail smtp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
47 } |
7580379cdc79
implement basic mail smtp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
48 props.setProperty("mail.smtp.socketFactory.port", s); |
7580379cdc79
implement basic mail smtp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
49 props.setProperty("mail.smtp.port", s); |
7580379cdc79
implement basic mail smtp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
50 } |
7580379cdc79
implement basic mail smtp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
51 |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
578
diff
changeset
|
52 String username = getString(params,"username"); |
228
7580379cdc79
implement basic mail smtp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
53 if( username == null ) { |
7580379cdc79
implement basic mail smtp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
54 session = Session.getInstance(props); |
7580379cdc79
implement basic mail smtp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
55 } else { |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
578
diff
changeset
|
56 String password = getString(params,"password"); |
228
7580379cdc79
implement basic mail smtp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
57 if( password==null ) |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
578
diff
changeset
|
58 throw new LuanException( "parameter 'password' is required with 'username'" ); |
228
7580379cdc79
implement basic mail smtp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
59 props.setProperty("mail.smtp.auth","true"); |
7580379cdc79
implement basic mail smtp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
60 final PasswordAuthentication pa = new PasswordAuthentication(username,password); |
7580379cdc79
implement basic mail smtp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
61 Authenticator auth = new Authenticator() { |
7580379cdc79
implement basic mail smtp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
62 protected PasswordAuthentication getPasswordAuthentication() { |
7580379cdc79
implement basic mail smtp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
63 return pa; |
7580379cdc79
implement basic mail smtp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
64 } |
7580379cdc79
implement basic mail smtp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
65 }; |
7580379cdc79
implement basic mail smtp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
66 session = Session.getInstance(props,auth); |
7580379cdc79
implement basic mail smtp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
67 } |
289
ae7ae2755b48
improve Mail;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
273
diff
changeset
|
68 |
ae7ae2755b48
improve Mail;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
273
diff
changeset
|
69 if( !params.isEmpty() ) |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
578
diff
changeset
|
70 throw new LuanException( "unrecognized parameters: "+params ); |
228
7580379cdc79
implement basic mail smtp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
71 } |
7580379cdc79
implement basic mail smtp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
72 |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
578
diff
changeset
|
73 private String getString(Map<Object,Object> params,String key) throws LuanException { |
289
ae7ae2755b48
improve Mail;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
273
diff
changeset
|
74 Object val = params.remove(key); |
228
7580379cdc79
implement basic mail smtp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
75 if( val!=null && !(val instanceof String) ) |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
578
diff
changeset
|
76 throw new LuanException( "parameter '"+key+"' must be a string" ); |
228
7580379cdc79
implement basic mail smtp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
77 return (String)val; |
7580379cdc79
implement basic mail smtp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
78 } |
7580379cdc79
implement basic mail smtp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
79 |
7580379cdc79
implement basic mail smtp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
80 |
7580379cdc79
implement basic mail smtp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
81 public void send(LuanState luan,LuanTable mailTbl) throws LuanException { |
7580379cdc79
implement basic mail smtp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
82 try { |
575
7c3ad6db8ac3
make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents:
572
diff
changeset
|
83 Map<Object,Object> mailParams = new HashMap<Object,Object>(mailTbl.asMap(luan)); |
228
7580379cdc79
implement basic mail smtp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
84 MimeMessage msg = new MimeMessage(session); |
7580379cdc79
implement basic mail smtp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
85 |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
578
diff
changeset
|
86 String from = getString(mailParams,"from"); |
228
7580379cdc79
implement basic mail smtp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
87 if( from != null ) |
7580379cdc79
implement basic mail smtp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
88 msg.setFrom(from); |
7580379cdc79
implement basic mail smtp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
89 |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
578
diff
changeset
|
90 String to = getString(mailParams,"to"); |
228
7580379cdc79
implement basic mail smtp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
91 if( to != null ) |
7580379cdc79
implement basic mail smtp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
92 msg.setRecipients(Message.RecipientType.TO,to); |
7580379cdc79
implement basic mail smtp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
93 |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
578
diff
changeset
|
94 String cc = getString(mailParams,"cc"); |
289
ae7ae2755b48
improve Mail;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
273
diff
changeset
|
95 if( cc != null ) |
ae7ae2755b48
improve Mail;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
273
diff
changeset
|
96 msg.setRecipients(Message.RecipientType.CC,cc); |
ae7ae2755b48
improve Mail;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
273
diff
changeset
|
97 |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
578
diff
changeset
|
98 String subject = getString(mailParams,"subject"); |
228
7580379cdc79
implement basic mail smtp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
99 if( subject != null ) |
7580379cdc79
implement basic mail smtp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
100 msg.setSubject(subject); |
7580379cdc79
implement basic mail smtp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
101 |
289
ae7ae2755b48
improve Mail;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
273
diff
changeset
|
102 Object body = mailParams.remove("body"); |
360
cbb94a7c7a9e
allow mail attachments;
Franklin Schmidt <fschmidt@gmail.com>
parents:
289
diff
changeset
|
103 Object attachments = mailParams.remove("attachments"); |
cbb94a7c7a9e
allow mail attachments;
Franklin Schmidt <fschmidt@gmail.com>
parents:
289
diff
changeset
|
104 Part bodyPart = attachments==null ? msg : new MimeBodyPart(); |
cbb94a7c7a9e
allow mail attachments;
Franklin Schmidt <fschmidt@gmail.com>
parents:
289
diff
changeset
|
105 |
270
b2c20fdcf42a
allow alternative-multipart mail
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
228
diff
changeset
|
106 if( body != null ) { |
b2c20fdcf42a
allow alternative-multipart mail
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
228
diff
changeset
|
107 if( body instanceof String ) { |
360
cbb94a7c7a9e
allow mail attachments;
Franklin Schmidt <fschmidt@gmail.com>
parents:
289
diff
changeset
|
108 bodyPart.setText((String)body); |
270
b2c20fdcf42a
allow alternative-multipart mail
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
228
diff
changeset
|
109 } else if( body instanceof LuanTable ) { |
273
073044e3ac03
fix mmake.sh and multipart mail
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
270
diff
changeset
|
110 LuanTable bodyTbl = (LuanTable)body; |
575
7c3ad6db8ac3
make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents:
572
diff
changeset
|
111 Map<Object,Object> map = new HashMap<Object,Object>(bodyTbl.asMap(luan)); |
270
b2c20fdcf42a
allow alternative-multipart mail
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
228
diff
changeset
|
112 MimeMultipart mp = new MimeMultipart("alternative"); |
273
073044e3ac03
fix mmake.sh and multipart mail
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
270
diff
changeset
|
113 String text = (String)map.remove("text"); |
073044e3ac03
fix mmake.sh and multipart mail
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
270
diff
changeset
|
114 if( text != null ) { |
270
b2c20fdcf42a
allow alternative-multipart mail
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
228
diff
changeset
|
115 MimeBodyPart part = new MimeBodyPart(); |
273
073044e3ac03
fix mmake.sh and multipart mail
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
270
diff
changeset
|
116 part.setText(text); |
270
b2c20fdcf42a
allow alternative-multipart mail
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
228
diff
changeset
|
117 mp.addBodyPart(part); |
b2c20fdcf42a
allow alternative-multipart mail
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
228
diff
changeset
|
118 } |
273
073044e3ac03
fix mmake.sh and multipart mail
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
270
diff
changeset
|
119 String html = (String)map.remove("html"); |
073044e3ac03
fix mmake.sh and multipart mail
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
270
diff
changeset
|
120 if( html != null ) { |
073044e3ac03
fix mmake.sh and multipart mail
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
270
diff
changeset
|
121 MimeBodyPart part = new MimeBodyPart(); |
073044e3ac03
fix mmake.sh and multipart mail
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
270
diff
changeset
|
122 part.setContent(html,"text/html"); |
073044e3ac03
fix mmake.sh and multipart mail
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
270
diff
changeset
|
123 mp.addBodyPart(part); |
073044e3ac03
fix mmake.sh and multipart mail
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
270
diff
changeset
|
124 } |
073044e3ac03
fix mmake.sh and multipart mail
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
270
diff
changeset
|
125 if( !map.isEmpty() ) |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
578
diff
changeset
|
126 throw new LuanException( "invalid body types: " + map ); |
360
cbb94a7c7a9e
allow mail attachments;
Franklin Schmidt <fschmidt@gmail.com>
parents:
289
diff
changeset
|
127 bodyPart.setContent(mp); |
270
b2c20fdcf42a
allow alternative-multipart mail
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
228
diff
changeset
|
128 } else |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
578
diff
changeset
|
129 throw new LuanException( "parameter 'body' must be a string or table" ); |
360
cbb94a7c7a9e
allow mail attachments;
Franklin Schmidt <fschmidt@gmail.com>
parents:
289
diff
changeset
|
130 } |
cbb94a7c7a9e
allow mail attachments;
Franklin Schmidt <fschmidt@gmail.com>
parents:
289
diff
changeset
|
131 |
cbb94a7c7a9e
allow mail attachments;
Franklin Schmidt <fschmidt@gmail.com>
parents:
289
diff
changeset
|
132 if( attachments != null ) { |
cbb94a7c7a9e
allow mail attachments;
Franklin Schmidt <fschmidt@gmail.com>
parents:
289
diff
changeset
|
133 if( !(attachments instanceof LuanTable) ) |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
578
diff
changeset
|
134 throw new LuanException( "parameter 'attachments' must be a table" ); |
360
cbb94a7c7a9e
allow mail attachments;
Franklin Schmidt <fschmidt@gmail.com>
parents:
289
diff
changeset
|
135 LuanTable attachmentsTbl = (LuanTable)attachments; |
cbb94a7c7a9e
allow mail attachments;
Franklin Schmidt <fschmidt@gmail.com>
parents:
289
diff
changeset
|
136 if( !attachmentsTbl.isList() ) |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
578
diff
changeset
|
137 throw new LuanException( "parameter 'attachments' must be a list" ); |
360
cbb94a7c7a9e
allow mail attachments;
Franklin Schmidt <fschmidt@gmail.com>
parents:
289
diff
changeset
|
138 MimeMultipart mp = new MimeMultipart("mixed"); |
cbb94a7c7a9e
allow mail attachments;
Franklin Schmidt <fschmidt@gmail.com>
parents:
289
diff
changeset
|
139 if( body != null ) |
cbb94a7c7a9e
allow mail attachments;
Franklin Schmidt <fschmidt@gmail.com>
parents:
289
diff
changeset
|
140 mp.addBodyPart((MimeBodyPart)bodyPart); |
cbb94a7c7a9e
allow mail attachments;
Franklin Schmidt <fschmidt@gmail.com>
parents:
289
diff
changeset
|
141 for( Object attachment : attachmentsTbl.asList() ) { |
cbb94a7c7a9e
allow mail attachments;
Franklin Schmidt <fschmidt@gmail.com>
parents:
289
diff
changeset
|
142 if( !(attachment instanceof LuanTable) ) |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
578
diff
changeset
|
143 throw new LuanException( "each attachment must be a table" ); |
575
7c3ad6db8ac3
make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents:
572
diff
changeset
|
144 Map<Object,Object> attachmentMap = new HashMap<Object,Object>(((LuanTable)attachment).asMap(luan)); |
360
cbb94a7c7a9e
allow mail attachments;
Franklin Schmidt <fschmidt@gmail.com>
parents:
289
diff
changeset
|
145 Object obj; |
cbb94a7c7a9e
allow mail attachments;
Franklin Schmidt <fschmidt@gmail.com>
parents:
289
diff
changeset
|
146 |
cbb94a7c7a9e
allow mail attachments;
Franklin Schmidt <fschmidt@gmail.com>
parents:
289
diff
changeset
|
147 obj = attachmentMap.remove("filename"); |
cbb94a7c7a9e
allow mail attachments;
Franklin Schmidt <fschmidt@gmail.com>
parents:
289
diff
changeset
|
148 if( obj==null ) |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
578
diff
changeset
|
149 throw new LuanException( "an attachment is missing 'filename'" ); |
360
cbb94a7c7a9e
allow mail attachments;
Franklin Schmidt <fschmidt@gmail.com>
parents:
289
diff
changeset
|
150 if( !(obj instanceof String) ) |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
578
diff
changeset
|
151 throw new LuanException( "an attachment filename must be a string" ); |
360
cbb94a7c7a9e
allow mail attachments;
Franklin Schmidt <fschmidt@gmail.com>
parents:
289
diff
changeset
|
152 String filename = (String)obj; |
cbb94a7c7a9e
allow mail attachments;
Franklin Schmidt <fschmidt@gmail.com>
parents:
289
diff
changeset
|
153 |
cbb94a7c7a9e
allow mail attachments;
Franklin Schmidt <fschmidt@gmail.com>
parents:
289
diff
changeset
|
154 obj = attachmentMap.remove("content_type"); |
cbb94a7c7a9e
allow mail attachments;
Franklin Schmidt <fschmidt@gmail.com>
parents:
289
diff
changeset
|
155 if( obj==null ) |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
578
diff
changeset
|
156 throw new LuanException( "an attachment is missing 'content_type'" ); |
360
cbb94a7c7a9e
allow mail attachments;
Franklin Schmidt <fschmidt@gmail.com>
parents:
289
diff
changeset
|
157 if( !(obj instanceof String) ) |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
578
diff
changeset
|
158 throw new LuanException( "an attachment content_type must be a string" ); |
360
cbb94a7c7a9e
allow mail attachments;
Franklin Schmidt <fschmidt@gmail.com>
parents:
289
diff
changeset
|
159 String content_type = (String)obj; |
cbb94a7c7a9e
allow mail attachments;
Franklin Schmidt <fschmidt@gmail.com>
parents:
289
diff
changeset
|
160 |
cbb94a7c7a9e
allow mail attachments;
Franklin Schmidt <fschmidt@gmail.com>
parents:
289
diff
changeset
|
161 Object content = attachmentMap.remove("content"); |
cbb94a7c7a9e
allow mail attachments;
Franklin Schmidt <fschmidt@gmail.com>
parents:
289
diff
changeset
|
162 if( content==null ) |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
578
diff
changeset
|
163 throw new LuanException( "an attachment is missing 'content'" ); |
360
cbb94a7c7a9e
allow mail attachments;
Franklin Schmidt <fschmidt@gmail.com>
parents:
289
diff
changeset
|
164 if( content_type.startsWith("text/") && content instanceof byte[] ) |
cbb94a7c7a9e
allow mail attachments;
Franklin Schmidt <fschmidt@gmail.com>
parents:
289
diff
changeset
|
165 content = new String((byte[])content); |
cbb94a7c7a9e
allow mail attachments;
Franklin Schmidt <fschmidt@gmail.com>
parents:
289
diff
changeset
|
166 |
cbb94a7c7a9e
allow mail attachments;
Franklin Schmidt <fschmidt@gmail.com>
parents:
289
diff
changeset
|
167 if( !attachmentMap.isEmpty() ) |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
578
diff
changeset
|
168 throw new LuanException( "unrecognized attachment parameters: "+attachmentMap ); |
360
cbb94a7c7a9e
allow mail attachments;
Franklin Schmidt <fschmidt@gmail.com>
parents:
289
diff
changeset
|
169 |
cbb94a7c7a9e
allow mail attachments;
Franklin Schmidt <fschmidt@gmail.com>
parents:
289
diff
changeset
|
170 MimeBodyPart part = new MimeBodyPart(); |
cbb94a7c7a9e
allow mail attachments;
Franklin Schmidt <fschmidt@gmail.com>
parents:
289
diff
changeset
|
171 part.setContent(content,content_type); |
cbb94a7c7a9e
allow mail attachments;
Franklin Schmidt <fschmidt@gmail.com>
parents:
289
diff
changeset
|
172 part.setFileName(filename); |
cbb94a7c7a9e
allow mail attachments;
Franklin Schmidt <fschmidt@gmail.com>
parents:
289
diff
changeset
|
173 mp.addBodyPart(part); |
cbb94a7c7a9e
allow mail attachments;
Franklin Schmidt <fschmidt@gmail.com>
parents:
289
diff
changeset
|
174 } |
cbb94a7c7a9e
allow mail attachments;
Franklin Schmidt <fschmidt@gmail.com>
parents:
289
diff
changeset
|
175 msg.setContent(mp); |
270
b2c20fdcf42a
allow alternative-multipart mail
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
228
diff
changeset
|
176 } |
228
7580379cdc79
implement basic mail smtp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
177 |
289
ae7ae2755b48
improve Mail;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
273
diff
changeset
|
178 if( !mailParams.isEmpty() ) |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
578
diff
changeset
|
179 throw new LuanException( "unrecognized parameters: "+mailParams ); |
289
ae7ae2755b48
improve Mail;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
273
diff
changeset
|
180 |
228
7580379cdc79
implement basic mail smtp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
181 Transport.send(msg); |
7580379cdc79
implement basic mail smtp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
182 } catch(MessagingException e) { |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
578
diff
changeset
|
183 throw new LuanException(e); |
228
7580379cdc79
implement basic mail smtp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
184 } |
7580379cdc79
implement basic mail smtp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
185 } |
7580379cdc79
implement basic mail smtp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
186 |
7580379cdc79
implement basic mail smtp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
187 } |