4

次のコードを使用して、nodemailer を使用して会議出席依頼を送信しようとしています。私が直面している問題は、会議の招待状が、直接追加できるリクエストではなく、添付の ics ファイルとして送信されることです。複数のメールクライアントで試しました。任意のポインタをいただければ幸いです。

transport.sendMail({
                    from: 'BakBak.io <biplav.saraf@gmail.com>',
                    to: 'biplav.saraf@gmail.com',
                    subject: 'Meeting',
                    //html: "Hi",
                    text: "Hola!!",
                    alternative: {
                      contentType: "text/calendar; method=REQUEST; name='meeting.ics';component=VEVENT",
                      contents: new Buffer(cal.toString()),
                      contentEncoding:"7bit",
                      "Content-Class":"urn:content-classes:calendarmessage"
                    },
                    headers: {
                              "Content-Type": "text/calendar", 
                              //"charset":"utf-8",
                              "method":"REQUEST",
                              "component":"VEVENT",
                              "Content-Class":"urn:content-classes:calendarmessage"
                            }//,
                    //attachments : [{filename:'invite.ics',contents: cal.toString()}]
                    }, function(err, responseStatus) {
                    if (err) {
                        console.log(err);
                        res.render('schedule',{errors: err.message});
                    } else {
                        console.log(responseStatus.message);
                        res.render('schedule',{success_msg: "Successfully Created!"});
                    }
                });
4

3 に答える 3

2

送信者と受信者が同じ場合、Gmail は会議出席依頼を表示せず、カレンダーに追加するオプションを提供します。

これは私のために働いたものです:

transport.sendMail({
                    from: 'BakBak.io <biplav.saraf@gmail.com>',
                    to: 'donateoldspectacles@gmail.com',
                    subject: 'Meeting',
                    html: "Hiya!!",
                    text: "Hola!!",
                    alternatives: [{
                      contentType: "text/calendar",
                      content: new Buffer(ical)
                    }]
                    }, function(err, responseStatus) {
                    if (err) {
                        console.log(err);
                        res.render('schedule',{errors: err.message});
                    } else {
                        console.log(responseStatus.message);
                        res.render('schedule',{success_msg: "Successfully Created!"});
                    }
                });
于 2014-06-20T15:13:30.897 に答える
0

問題はここにあると思います。"Content-Type": "text/calendar" ユーザーがメールのリンクをクリックして追加できるように、コンテンツをプレーンテキストまたは HTML として単純に追加する場合は、textまたはHTMLヘッダーを使用することをお勧めします。たとえば、ユーザーがクリックしてイベントに参加できる場所から、Google カレンダーへのリンクを送信するだけです。

これ"Content-Type": "text/calendar"により、メールの送信者/クライアントは、メールに添付または関連付けられた実際のファイルがあると信じ込ませます。

Update:

添付された ICS ファイルを添付する必要があります。そうしないと、メール クライアントはそれがイベントであると認識できません。適切なヘッダーを使用するだけで済みます。例えば:

Content-Type: text/calendar; method=REQUEST
Content-Transfer-Encoding: Base64
Content-Disposition: attachment; filename=iCal-20140610-083450.ics

.ics ファイルを添付します。メールクライアントはそれを理解するのに十分スマートで、クリックするとローカルカレンダーに追加するオプションを提供します.

AirMailテキスト内の日付を自動的に検出し、添付ファイルを必要とせず、ユーザーがイベントをローカル カレンダーに直接統合できるようにするメール クライアントもありますが、この機能は広く利用できません。

于 2014-06-20T09:43:38.010 に答える