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 }