| 'use strict'; |
| |
| const Mailer = require('./mailer'); |
| const shared = require('./shared'); |
| const SMTPPool = require('./smtp-pool'); |
| const SMTPTransport = require('./smtp-transport'); |
| const SendmailTransport = require('./sendmail-transport'); |
| const StreamTransport = require('./stream-transport'); |
| const JSONTransport = require('./json-transport'); |
| const SESTransport = require('./ses-transport'); |
| |
| module.exports.createTransport = function (transporter, defaults) { |
| let urlConfig; |
| let options; |
| let mailer; |
| |
| if ( |
| // provided transporter is a configuration object, not transporter plugin |
| (typeof transporter === 'object' && typeof transporter.send !== 'function') || |
| // provided transporter looks like a connection url |
| (typeof transporter === 'string' && /^(smtps?|direct):/i.test(transporter)) |
| ) { |
| |
| if ((urlConfig = typeof transporter === 'string' ? transporter : transporter.url)) { |
| // parse a configuration URL into configuration options |
| options = shared.parseConnectionUrl(urlConfig); |
| } else { |
| options = transporter; |
| } |
| |
| if (options.pool) { |
| transporter = new SMTPPool(options); |
| } else if (options.sendmail) { |
| transporter = new SendmailTransport(options); |
| } else if (options.streamTransport) { |
| transporter = new StreamTransport(options); |
| } else if (options.jsonTransport) { |
| transporter = new JSONTransport(options); |
| } else if (options.SES) { |
| transporter = new SESTransport(options); |
| } else { |
| transporter = new SMTPTransport(options); |
| } |
| } |
| |
| mailer = new Mailer(transporter, options, defaults); |
| |
| return mailer; |
| }; |