Mercurial Hosting > luan
comparison src/goodjava/mail/Message.java @ 1585:c0ef8acf069d
multipart mail
| author | Franklin Schmidt <fschmidt@gmail.com> |
|---|---|
| date | Fri, 12 Mar 2021 18:06:15 -0700 |
| parents | d3728e3e5af3 |
| children | fa1a9aceac3e |
comparison
equal
deleted
inserted
replaced
| 1584:d3728e3e5af3 | 1585:c0ef8acf069d |
|---|---|
| 1 package goodjava.mail; | 1 package goodjava.mail; |
| 2 | 2 |
| 3 import java.util.Map; | 3 import java.util.Map; |
| 4 import java.util.Base64; | 4 import java.util.Base64; |
| 5 import java.util.Random; | |
| 5 import java.util.regex.Pattern; | 6 import java.util.regex.Pattern; |
| 6 import java.util.regex.Matcher; | 7 import java.util.regex.Matcher; |
| 7 import goodjava.util.GoodUtils; | 8 import goodjava.util.GoodUtils; |
| 8 | 9 |
| 9 | 10 |
| 10 public class Message { | 11 public class Message { |
| 11 public final Map<String,String> headers; | 12 final Map<String,String> headers; |
| 12 public final Object content; | 13 final Object content; |
| 13 private static Pattern line = Pattern.compile("(?m)^.*$"); | 14 private static Pattern line = Pattern.compile("(?m)^.*$"); |
| 14 | 15 |
| 15 public Message(Map<String,String> headers,Object content) { | 16 public Message(Map<String,String> headers,Object content) { |
| 16 this.headers = headers; | 17 this.headers = headers; |
| 17 this.content = content; | 18 this.content = content; |
| 61 } else if( content instanceof byte[] ) { | 62 } else if( content instanceof byte[] ) { |
| 62 sb.append( "Content-Type: " ).append( contentType ).append( "\r\n" ); | 63 sb.append( "Content-Type: " ).append( contentType ).append( "\r\n" ); |
| 63 sb.append( "Content-Transfer-Encoding: base64\r\n" ); | 64 sb.append( "Content-Transfer-Encoding: base64\r\n" ); |
| 64 sb.append( "\r\n" ); | 65 sb.append( "\r\n" ); |
| 65 addBase64( sb, (byte[])content ); | 66 addBase64( sb, (byte[])content ); |
| 67 } else if( content instanceof Message[] ) { | |
| 68 Message[] messages = (Message[])content; | |
| 69 String[] texts = new String[messages.length]; | |
| 70 StringBuilder allTextSb = new StringBuilder(); | |
| 71 for( int i=0; i<messages.length; i++ ) { | |
| 72 String text = messages[i].toText(); | |
| 73 texts[i] = text; | |
| 74 allTextSb.append(text); | |
| 75 } | |
| 76 String allText = allTextSb.toString(); | |
| 77 String boundary; | |
| 78 do { | |
| 79 boundary = Long.toHexString(new Random().nextLong()); | |
| 80 } while( allText.contains(boundary) ); | |
| 81 sb.append( "Content-Type: " ).append( contentType ) | |
| 82 .append( "; boundary=\"" ).append( boundary ).append( "\"\r\n" ); | |
| 83 sb.append( "\r\n" ); | |
| 84 for( String text : texts ) { | |
| 85 sb.append( "--" ).append( boundary ).append( "\r\n" ); | |
| 86 sb.append( text ); | |
| 87 sb.append( "\r\n" ); | |
| 88 } | |
| 89 sb.append( "--" ).append( boundary ).append( "--\r\n" ); | |
| 66 } else | 90 } else |
| 67 throw new MailException("content is unrecognized type"); | 91 throw new MailException("content is unrecognized type: "+content.getClass()); |
| 68 return sb.toString(); | 92 return sb.toString(); |
| 69 } | 93 } |
| 70 } | 94 } |
