2016-07-31 5 views
0

я такой конфиг nodemailerNodemailer ошибка производства

import nodemailer from 'nodemailer'; 
import {email, emailPassword, emailService, emailName} from '../../config.json'; 

var transporter = nodemailer.createTransport(`smtps://${emailName}%40${emailService}:${emailPassword}@smtp.${emailService}`); 


export function sendFeedBack(req, res, next) { 
    const reason = chooseReason(req.body.reason); 
    const email = req.body.email || ' не указан'; 

    var mailOptions = { 
    from  : `MyDoc-TV`, 
    to  : `[email protected]`, 
    subject : `MyDoc-TV : ${reason}`, 
    text  : 'Причина : ' + reason + '\n' + 
       'Имя : ' + req.body.name + '\n' + 
       'Фамилия : '+ req.body.surname + '\n' + 
       'Телефон : '+ req.body.phone + '\n' + 
       'Имейл : '+ email + '\n' + 
       'Сообщение : '+ req.body.message 
    }; 

    transporter.sendMail(mailOptions,function(error) { 
    if(error){ 
     return res.end({error:'error in mail servise'}) 
    } 
    console.log('send succes'); 
    return res.end(); 
    }); 
} 

и все липкое на локальном хосте, но когда я положил его на сервере производства он сломал мой сервер. с ошибкой

_http_outgoing.js:542 
    throw new TypeError('First argument must be a string or Buffer'); 
    ^

TypeError: First argument must be a string or Buffer 
    at ServerResponse.OutgoingMessage.end (_http_outgoing.js:542:11) 
    at server/controllers/feedBackController.js:25:18 
    at Nodemailer.<anonymous> 

ошибки только на производстве, я в настройках почтового видеть, что я должен подтвердить неизвестный запрос от моего сервера, который находится в Лондоне, я соответствовать, но все еще есть ошибки, благодаря

ответ

0

Я думаю, что ваш transporter.sendMail звонок сбой в производстве, и ошибка, которую вы видите, вызвана тем, что вы вызываете res.end с объектом в качестве первого аргумента.

В соответствии с https://nodejs.org/api/http.html#http_response_end_data_encoding_callback вы должны называть res.end строкой или буфером и указывать кодировку того, что вы отправляете.

Однако причина, по которой ваш nodemailer терпит неудачу, не совсем ясна. Вы должны сначала исправить свой звонок res.end и передать также аргументированный аргумент error вашего обратного вызова, чтобы вы могли лучше понять, что происходит. В этом аргументе ошибки должна отображаться причина, по которой nodemailer не может связаться с вашим SMTP-сервером. Возможно, есть проблема с сетью или вашей производственной инфраструктурой.

Кроме того, вы можете ознакомиться с документами nodemailer, чтобы правильно настроить его. Хорошая идея может быть быть более явным, передавая объект функции createTransport:

function getTransport(smtp) { 
    return nodemailer.createTransport({ 
    host:  smtp.host, 
    port:  smtp.port, 
    secure: smtp.secure, 
    ignoreTLS: smtp.ignoreTLS, 
    auth:  smtp.username ? coerceAuth() : void(0) 
    }); 

    function coerceAuth() { 
    return { 
     user: smtp.username, 
     pass: smtp.password 
    }; 
    } 
} 

Надежда, что помогает!

Смежные вопросы