comparison src/fschmidt/util/mail/SmtpServerPool.java @ 68:00520880ad02

add fschmidt source
author Franklin Schmidt <fschmidt@gmail.com>
date Sun, 05 Oct 2025 17:24:15 -0600
parents
children
comparison
equal deleted inserted replaced
67:9d0fefce6985 68:00520880ad02
1 package fschmidt.util.mail;
2
3
4 public class SmtpServerPool implements SmtpServer {
5 private SmtpServer[] servers;
6 private volatile SmtpServer defaultServer;
7
8 SmtpServerPool(SmtpServer... servers) {
9 this.servers = servers;
10 defaultServer = servers[0];
11 }
12
13 public void send(Mail mail, MailAddress... addresses) throws MailException {
14 SmtpServer server = defaultServer;
15 try {
16 server.send(mail, addresses);
17 return;
18 } catch (MailParseException e) {
19 throw e;
20 } catch (MailAddressException e) {
21 throw e;
22 } catch (MailEncodingException e) {
23 throw e;
24 } catch (MailException e) {
25 for (SmtpServer fallbackServer : servers) {
26 if (fallbackServer == server) continue;
27 try {
28 fallbackServer.send(mail, addresses);
29 defaultServer = fallbackServer;
30 return;
31 } catch (MailException e2) {
32 e = e2;
33 }
34 }
35 throw new MailException("all smtp servers failed", e);
36 }
37 }
38
39 public void sendFrom(final Mail mail, final String smtpFrom) throws MailException {
40 SmtpServer server = defaultServer;
41 try {
42 server.sendFrom(mail, smtpFrom);
43 return;
44 } catch (MailParseException e) {
45 throw e;
46 } catch (MailAddressException e) {
47 throw e;
48 } catch (MailEncodingException e) {
49 throw e;
50 } catch (MailException e) {
51 for (SmtpServer fallbackServer : servers) {
52 if (fallbackServer == server) continue;
53 try {
54 fallbackServer.sendFrom(mail, smtpFrom);
55 defaultServer = fallbackServer;
56 return;
57 } catch (MailException e2) {
58 e = e2;
59 }
60 }
61 throw new MailException("all smtp servers failed", e);
62 }
63 }
64
65 public void useSsl() {
66 for (SmtpServer server : servers) {
67 server.useSsl();
68 }
69 }
70
71 public void useStartTls() {
72 for (SmtpServer server : servers) {
73 server.useStartTls();
74 }
75 }
76
77 public void setPort(int port) {
78 for (SmtpServer server : servers) {
79 server.setPort(port);
80 }
81 }
82
83 public void setDebug(boolean b) {
84 for (SmtpServer server : servers) {
85 server.setDebug(b);
86 }
87 }
88
89 public String getUserName() {
90 return defaultServer.getUserName();
91 }
92 }