2015-12-23 6 views
1

Я только начинаю изучать javascript, и я хотел попробовать создать небольшие проекты, чтобы они были на мокрой ноге. Как часть моего первого удара, я создаю инструмент командной строки, который будет отправлять PDF-вложения. Сценарий должен отправить электронное письмо с вложением pdf на основе аргумента, переданного в javascript. Я нашел code, перейдя по ссылке и изменив его, чтобы удовлетворить мои потребности, так как я хотел принимать аргументы из командной строки. Я включил код, который я использую ниже. Предполагается, что имя файла pdf (test.pdf) будет передано в качестве аргумента, а затем отправит электронное письмо назначенным получателям с прикрепленным файлом. Если я запустил его с моим кодом, как показано, я получаю письмо, но вложение получило сообщение «undefined.pdf» и не может быть открыто.nodemailer: не удается отправить вложение в формате PDF

Он работает только в том случае, если я изменяю строку path: '/home/user/attachments/' + myArgs[3], как path: '/home/user/attachments/test.pdf',, которая разрушает точку сценария, потому что я не хочу жестко кодировать имя файла в «пути» для присоединения файла pdf.
(Для тестирования я запускаю скрипт из того же каталога, что и вложения \ home \ user \ attachments.)

Может ли кто-нибудь указать, что я делаю неправильно? Я новичок в JavaScript, так что я предполагаю, что я что-то очевидное отсутствует:] ....

var nodemailer = require('nodemailer'); 
var myArgs = process.argv.slice(2); 
console.log('myArgs: ', myArgs); 

// create reusable transporter object using SMTP transport 
var transporter = nodemailer.createTransport({ 
    service: 'Gmail', 
    auth: { 
     user: '[email protected]', 
     pass: 'secret' 
    } 
}); 

// NB! No need to recreate the transporter object. You can use 
// the same transporter object for all e-mails 

// setup e-mail data with unicode symbols 

var mailOptions = { 
    from: 'Somebody <[email protected]>', // sender address 
    to: '[email protected], [email protected]', // list of receivers 
    subject: 'Hello', // Subject line 
    text: 'Hello world', // plaintext body 
    html: '<b>Hello world</b>', // html body 

    attachments: [ 
     { // filename and content type is derived from path 
      filename: myArgs[3], 
      path: '/home/user/attachments/' + myArgs[3], 
      contentType: 'application/pdf' 
     } 
    ] 
}; 

// send mail with defined transport object 
transporter.sendMail(mailOptions, function(error, info){ 
    if(error){ 
     return console.log(error); 
    } 
    console.log('Message sent: ' + info.response); 

}); 

ТИА, Крис

+0

Что выводит строка 'console.log' (строка 3)? –

ответ

1

Давайте предположим, что вы запускаете такую ​​команду из консоли :

node script.js file.pdf 

process.argv возвращает массив, содержащий аргументы командной строки. Таким образом, было бы:

process.argv[0] = 'node' 
process.argv[1] = 'path/to/script.js' 
process.argv[2] = 'file.pdf 

Применяя slice(2), process.argv превращается в массив только с одним элементом:

process.argv[0] = 'file.pdf'; 

Таким образом, это наиболее вероятно, что вы должны изменить myArgs[3] к myArgs[0]. Или вы должны добавить дополнительные аргументы, чтобы file arg стал шестым. Например:

node script.js [email protected] [email protected] email subject file.pdf 
+0

Большое спасибо Лазареву! Вот и все. Изменено 'myArgs [3]' to myArgs [0] ', и оно работает сейчас. – Chris

+0

Рад помочь вам! :) –

+0

@LazarevAlexandr Как вы учитываете возможность загрузки файлов в формате PDF и их прикрепление? Каким будет «путь»? Очевидно, это не был бы путь к локальной файловой системе – Growler