Non abbastanza rep per commentare.
Ho finito per risolvere il problema degli allegati utilizzando il pacchetto NPM di Sendgrids.
npm install sendgrid
Se non si dispone di npm nell'app meteo, è possibile leggerlo. https://meteorhacks.com/complete-npm-integration-for-meteor
Nella tua packages.json
{
"sendgrid": "1.4.0"
}
Poi, in un file che viene eseguito sul server:
Meteor.startup(function(){
process.env.MAIL_URL = 'smtp://<username>:<password>@smtp.sendgrid.net:587';
});
Qui è un metodo di esempio meteora che ottiene l'URL di un allegato (noi stiamo usando S3) da una collezione di allegati. Questo particolare metodo può inviare qualsiasi numero di allegati a qualsiasi numero di destinatari. C'è qualche logica specifica per il contesto qui, ma dovrebbe essere sufficiente per farti funzionare mandando allegati.
La parte importante:
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);
}
});
un metodo completo esempio:
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;
}
});
Qual è il codice di nodemailer hai provato? Non credo che gli allegati siano supportati nel pacchetto ufficiale dei meteoriti. – rivarolle
Ho usato [questo pacchetto] (https://atmospherejs.com/mrt/meteor-nodemailer) e ho seguito le istruzioni per farlo funzionare (ha una configurazione abbastanza simile all'e-mail di Meteor). Aggiornerò la mia domanda con il codice. –
Questo articolo ha alcuni esempi http://kukuruku.co/hub/javascript/meteor-how-to-build-a-todo-list –