1 module vibeauth.mail.vibe;
2 
3 import vibe.mail.smtp;
4 import vibe.inet.message;
5 import vibe.stream.tls;
6 
7 import vibeauth.mail.base;
8 import vibeauth.users;
9 import vibeauth.token;
10 
11 import std.process;
12 import std.stdio;
13 import std.string;
14 import std.conv;
15 import std.datetime;
16 
17 class VibeMailQueue : MailQueue {
18 
19 	private {
20 		SMTPClientSettings smtpSettings;
21 	}
22 
23 	this(EmailConfiguration settings) {
24 		super(settings);
25 
26 		smtpSettings = new SMTPClientSettings(settings.smtp.host, settings.smtp.port);
27 
28 		smtpSettings.authType = settings.smtp.authType.to!SMTPAuthType;
29 		smtpSettings.connectionType = settings.smtp.connectionType.to!SMTPConnectionType;
30 		smtpSettings.tlsValidationMode = settings.smtp.tlsValidationMode.to!TLSPeerValidationMode;
31 		smtpSettings.tlsVersion = settings.smtp.tlsVersion.to!TLSVersion;
32 
33 		smtpSettings.localname = settings.smtp.localname;
34 		smtpSettings.password = settings.smtp.password;
35 		smtpSettings.username = settings.smtp.username;
36 	}
37 
38 	override void addMessage(Message message) {
39 		send(message);
40 	}
41 
42 	private void send(Message message) {
43 
44 		foreach(to; message.to) {
45 			Mail email = new Mail;
46 
47 			email.headers["Date"] = Clock.currTime.toRFC822DateTimeString;
48 			email.headers["Sender"] = message.from;
49 			email.headers["From"] = message.from;
50 			email.headers["To"] = to;
51 			email.headers["Subject"] = message.subject;
52 
53 			foreach(header; message.headers) {
54 				auto index = header.indexOf(':');
55 				email.headers[header[0..index]] = header[index+1..$].strip;
56 			}
57 
58 			email.bodyText = message.mailBody;
59 
60 			sendMail(smtpSettings, email);
61 		}
62 	}
63 }