2017-10-17 6 views
0

Ich habe Schwierigkeiten, DKIM Signieren mit node.js und nodemailer einzurichten. Hier ist, was ich habe: Ein regelmäßiges selbst gehosteten SMTP-E-Mail wie [email protected] auf hosteurope.com Eine Domain mit DNS-Einstellungen gehostet bei inwx.com Node.js 8.4.0machen node.js 'nodemailer arbeiten mit dkim smtp

Schritt 1: Generierung der DKIM-Schlüssel Ich ging zu https://www.port25.com/dkim-wizard/ und gab meinen Domain-Namen und drücken Sie Schlüssel oder was auch immer. Dann habe ich Sachen, die ich als TXT-Eintrag in die DNS-Einstellungen bei meinem Domain-Registrar setzen sollte. Um sicherzustellen, dass es funktioniert, ich lief:

dig TXT default._domainkey.example.com 

und bekam hier

; <<>> DiG 9.8.3-P1 <<>> TXT default._domainkey.mydomain.com 
;; global options: +cmd 
;; Got answer: 
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 28927 
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0 

;; QUESTION SECTION: 
;default._domainkey.mydomain.com. IN TXT 

;; ANSWER SECTION: 
default._domainkey.mydomain.com. 3554 IN TXT "k=rsa\; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmwCHK6Szd9ObPoD9I4JkdB9+W7a/IzGKnntAbWnHitMxQyl4TsmofRm+RZDS/Ije99opzmjLBeaCiiNXYs6nvhaVR4lrN9IFpmaJ5yuyicmE9HCDM99qlPUUzgk4l3YAGVSNK83FS7UNc5r0Ymh1bWKKB6FFwqgjVAzP6yJ7Bst0C88Wko0UHSJqeg3Y4mfeys9p6yyro4" "HnFJ+UQGYtwGD11z5+MdHI9D5eIa1TC7t0VSRYll94n4VHZI43uGO+jk3tm/LCMaYaksEiMD55rLUg78VAhh0pDsNPowbeXxcBYITqv9oMn7tNZQQKmXRU5G/WwsBpi9wrJuja7vl22wIDAQAB" 

;; Query time: 0 msec 
;; SERVER: 192.168.1.1#53(192.168.1.1) 
;; WHEN: Tue Oct 17 13:53:10 2017 
;; MSG SIZE rcvd: 464 

Sehen Sie, wie ich den öffentlichen Schlüssel in die DNS-Einstellungen festgelegt:

inwx dkim settings

Schritt 2: Herunterladen des privaten Schlüssels Ich legte es in eine Datei und nannte es dkim.pem.

Schritt 3: Richten Sie ein einfaches node.js-Programm ein, das eine von dkim signierte E-Mail sendet.

var fs = require('fs'); 
var nodemailer = require('nodemailer'); 
var EmailTemplate = require('email-templates').EmailTemplate 
var path = require('path') 

// config of nodemailer 
var poolConfig = { 
    pool: true 
    , host: 'mail.example.com' 
    , port: 25 
    , secure: false // use SSL 
    , auth: { 
      user: '[email protected]', 
      pass: 'mypassword' 
    }, tls: { 
      rejectUnauthorized: false 
    }, dkim: { 
      domainName: 'example.com' 
      , keySelector: 'default' 
      , privateKey: fs.readFileSync('./certificates/dkim/dkim.pem', "utf8") 
      , cacheDir: '/tmp' 
      , cacheTreshold: 100 * 1024 
    } 
}; 

// use config to generate a transporter 
var transporter = nodemailer.createTransport(poolConfig); 

// the email and its content as json 
var user = {email: "[email protected]"}; 
var message = { 
    template : "contactform" 
    , subject : "Message from Simon" 
    , pageData : {formdata: {salutation : "salutation", firstname: "firstname", lastname : "lastname", phone : "phone", email: "email", subject : "subject", text : "text" }} 
}; 

// send the email 
if(user && user.email) { 
    if(message.template && message.subject && message.pageData) { 
     var path_email = path.join(__dirname, 'templates', message.template) 
     var template_email = new EmailTemplate(path_email) 

     message.pageData.base_url = "https://example.com"; 

     console.log(message.pageData); 

     template_email.render(message.pageData, function (err, result) { 
      if (err) { 
       return console.error(err) 
      } 
      // actual sending of the email 
      transporter.sendMail({ 
       from: "[email protected]", // sender address 
       to: user.email, // list of receivers 
       subject: message.subject, // Subject line 
       html: result.html, 
       text: result.text.replace(/<\/p>/g,'\n').replace(/<\/?\w+((\s+\w+(\s*=\s*(?:".*?"|'.*?'|[\^'">\s]+))?)+\s*|\s*)\/?>/g,'') 
      }, function (err, responseStatus) { 
       if (err) { 
        return console.error(err) 
       } 
       console.log("email send to " + user.email); 
      }) 
     }) 
    } else { 
     console.log("Error no template, subject or pageData", null); 
    } 
} else { 
    console.log("Error no user or email", null); 
} 

// create a hello world nodejs server to wait until email has send... 
var express = require('express'); 
var app = express(); 
app.listen(3000, function() { 
    console.log('Example app listening on port 3000. Waiting for email to be send...'); 
}); 
  1. Öffnen Sie die Rohdaten der empfangenen E-Mail und keine dkim nichts finden. Ich habe die E-Mail-Funktion von Apple verwendet, um die E-Mail zu überprüfen, aber es gab keinen Hash-Wert für dkim-Datensätze oder was auch immer in der E-Mail. mail-tester.com gibt mir auch kein positives Ergebnis auf dkim. Man sagt nur: „Ihre Nachricht nicht mit DKIM unterzeichnet wird“

ich jede Hilfe dankbar, die dieses Problem löst :-) Sie

Antwort

0

Vielen ich es endlich. Grundsätzlich könnte es kein dümmeres Problem sein: Ich habe die neueste Version von nodemailer nicht benutzt. Ich habe 2.4 benutzt, aber das Argument dkim benötigt mindestens den Knoten 3 - Ich habe den Knoten 4.2 verwendet.