1 package org.cacert.gigi.email;
3 import java.io.BufferedReader;
4 import java.io.IOException;
5 import java.io.InputStreamReader;
6 import java.io.PrintWriter;
7 import java.net.Socket;
8 import java.text.SimpleDateFormat;
9 import java.util.Base64;
10 import java.util.Date;
11 import java.util.Locale;
12 import java.util.regex.Pattern;
17 private static final Pattern NON_ASCII = Pattern
18 .compile("[^a-zA-Z0-9 .-\\[\\]!_@]");
20 public static void sendmail(String to, String subject, String message,
21 String from, String replyto, String toname, String fromname,
22 String errorsto, boolean extra) throws IOException {
24 String[] bits = from.split(",");
26 Socket smtp = new Socket("dogcraft.de", 25);
27 PrintWriter out = new PrintWriter(smtp.getOutputStream());
28 BufferedReader in = new BufferedReader(new InputStreamReader(
29 smtp.getInputStream()));
31 out.print("HELO www.cacert.org\r\n");
34 out.print("MAIL FROM:<returns@cacert.org>\r\n");
38 for (String user : bits) {
39 out.print("RCPT TO:<" + user.trim() + ">\r\n");
43 out.print("DATA\r\n");
46 out.print("X-Mailer: CAcert.org Website\r\n");
47 // if (array_key_exists("REMOTE_ADDR", $_SERVER)) {
48 // out.print("X-OriginatingIP: ".$_SERVER["REMOTE_ADDR"]."\r\n");
51 SimpleDateFormat emailDate = new SimpleDateFormat(
52 "E, d MMM yyyy HH:mm:ss ZZZZ (z)", Locale.ENGLISH);
54 + emailDate.format(new Date(System.currentTimeMillis()))
56 out.print("Sender: " + errorsto + "\r\n");
57 out.print("Errors-To: " + errorsto + "\r\n");
58 if (replyto != null) {
59 out.print("Reply-To: " + replyto + "\r\n");
61 out.print("Reply-To: " + from + "\r\n");
63 out.print("From: " + from + "\r\n");
64 out.print("To: " + to + "\r\n");
65 if (NON_ASCII.matcher(subject).matches()) {
67 out.print("Subject: =?utf-8?B?"
68 + Base64.getEncoder().encodeToString(subject.getBytes())
71 out.print("Subject: " + subject + "\r\n");
73 out.print("Mime-Version: 1.0\r\n");
75 out.print("Content-Type: text/plain; charset=\"utf-8\"\r\n");
76 out.print("Content-Transfer-Encoding: 8bit\r\n");
78 out.print("Content-Type: text/plain; charset=\"iso-8859-1\"\r\n");
79 out.print("Content-Transfer-Encoding: quoted-printable\r\n");
80 out.print("Content-Disposition: inline\r\n");
82 // out.print("Content-Transfer-Encoding: BASE64\r\n");
84 // out.print(chunk_split(base64_encode(recode("html..utf-8",
85 // $message)))."\r\n.\r\n");
86 message = message + "\r\n";
88 String sendM = message.replace("\r", "").replace("\n.\n", "\n")
89 .replace("\n.\n", "\n").replace("\n", "\r\n")
99 private static void readResponse(BufferedReader in) throws IOException {
101 while ((line = in.readLine()) != null && line.matches("\\d+-")) {