nicht genug rep zu kommentieren.
Ich löste das Problem Anhang mit Sendgrids NPM-Paket.
npm install sendgrid
Wenn Sie nicht npm in Ihrer Meteor App haben, können Sie dies lesen. https://meteorhacks.com/complete-npm-integration-for-meteor
In Ihrem packages.json
{
"sendgrid": "1.4.0"
}
dann in einer Datei, die auf dem Server ausgeführt wird:
Meteor.startup(function(){
process.env.MAIL_URL = 'smtp://<username>:<password>@smtp.sendgrid.net:587';
});
Hier ein Beispiel Meteor-Methode, die die URL einer Anlage bekommt (wir verwenden S3) aus einer Anhangsammlung. Diese bestimmte Methode kann beliebig viele Anlagen an beliebig viele Empfänger senden. Es gibt hier einige kontextspezifische Logik, aber es sollte ausreichen, um Sie zum Senden von Anhängen zu bewegen.
Der wichtige Teil:
var email = new sendgrid.Email();
email.setFrom("[email protected]");
email.setSubject("subject");
email.addFile({
filename: attachment_name,
url: attachment_url
});
sendgrid.send(email, function (err, json) {
if (err) {
console.error(err);
}
if (json) {
console.log(json.message);
}
});
Ein komplettes Verfahren Beispiel:
Meteor.methods({
SendEmail: function (subject, message, templateNumber) {
//console.log(subject, message, templateNumber);
var user_id = Meteor.userId();
var list = UserList.find({user_id: user_id}).fetch();
var sentTemplate = sentTemplate + templateNumber;
var counter = 0;
console.log(list.length);
// Track is the 'No Response' from the list.
for (var i = 0; i < list.length; i++) {
var email = new sendgrid.Email();
if (list[i].track == null || list[i].track == "1") {
//email.addTo(list[0].list[i].Email);
//console.log(list[0].list[i].Email);
email.to = list[i].email;
}
email.setFrom(Meteor.user().email);
email.replyto = Meteor.user().email;
email.setSubject(subject);
var firstName = list[i].name.split(" ")[0];
var companyReplace = message.replace("{{Company}}", list[i].company).replace("{{Company}}", list[i].company).replace("{{Company}}", list[i].company).replace("{{Company}}", list[i].company).replace("{{Company}}", list[i].company);
var nameReplace = companyReplace.replace("{{Name}}",list[i].name).replace("{{Name}}",list[i].name).replace("{{Name}}",list[i].name).replace("{{Name}}",list[i].name).replace("{{Name}}",list[i].name)
var firstNameReplace = companyReplace.replace("{{FirstName}}",firstName).replace("{{FirstName}}",firstName).replace("{{FirstName}}",firstName).replace("{{FirstName}}",firstName).replace("{{FirstName}}",firstName);
email.setHtml(firstNameReplace);
var numAttachments = Attachments.find({user_id: Meteor.userId()}).fetch().length;
var attachments = Attachments.find({user_id: Meteor.userId()}).fetch();
console.log("**********Attachments****************");
console.log(attachments);
console.log("**********Attachments****************");
for (var t = 0; t < numAttachments; t++) {
email.addFile({
filename: attachments[t].attachment_name,
url: attachments[t].attachment_url
});
}
sendgrid.send(email, function (err, json) {
if (err) {
console.error(err);
}
if (json) {
console.log(json.message);
}
});
//console.log(email);
} // end for loop
if (templateNumber == 1) {
Meteor.users.update({_id:Meteor.userId()}, {$set: {"sentTemplate1": true}});
}
if (templateNumber == 2) {
Meteor.users.update({_id:Meteor.userId()}, {$set: {"sentTemplate2": true}});
}
if (templateNumber == 3) {
Meteor.users.update({_id:Meteor.userId()}, {$set: {"sentTemplate3": true}});
}
if (templateNumber == 4) {
Meteor.users.update({_id:Meteor.userId()}, {$set: {"sentTemplate4": true}});
}
// for each email. replace all html
return list.length;
}
});
was die nodemailer Code, den Sie versucht? Ich glaube nicht, dass Anhänge im offiziellen Meteor-Paket unterstützt werden. – rivarolle
Ich verwendete [dieses Paket] (https://atmosphherejs.com/mrt/meteor-nodemailer) und befolgte die Anweisungen, um es zum Laufen zu bringen (hat eine ähnliche Konfiguration wie Meteor's E-Mail). Ich werde meine Frage mit dem Code aktualisieren. –
Dieser Artikel hat einige Beispiele http://kukuruku.co/hub/javascript/meteor-how-to-build-a-todo-list –