メールからGoogleカレンダーへのイベントのワンクリックエクスポート-落とし穴

画像



顧客の事前登録サービスの機能の1つとして、 zabroniruy.comは、クライアントが今後のイベントに関するすべての情報を、既存のタスクスケジューラに(できればワンクリックで)簡単にエクスポートできる形式で受信する必要があるという考えに気付きました。 作業の過程で、すべてのプランナーが開発者にとって等しく「友好的」というわけではないという事実に直面しました。



iCalendar形式に基づく-この形式は単純であり、多くのアプリケーションでサポートされています



フォーマット自体に問題はありませんでした。 レターに添付ファイルを追加するだけで、OutlookまたはEvolutionユーザー(これらのアプリケーションでテスト済み)は、ワンクリックでカレンダーにデータをエクスポートできます。 しかし、Gmailユーザーがファイルをダウンロードしてカレンダーにエクスポートするのではなく、Googleカレンダーにイベントを簡単に追加できるようにしたかったのです(ほとんどの人はそうしませんでした)。



そして、ここから楽しみが始まりました。 Googleは、ICSファイルが添付された書き込み用のカレンダーアイコンを表示しますが、添付ファイルはダウンロードのみ可能です。 ただし、Gmailには[招待を挿入]オプションがあり、この場合、受信者には、ワンクリックでGoogleカレンダーにインポートできる添付ファイル付きのメールが送信されます。 これが私たちが達成したかったものです。 Google自体の検索では何も得られませんでした。添付ファイルがGmailから直接作成された招待状と同じ方法で処理されなかった理由を自分で見つけなければなりませんでした。



この時点でファイルをレターに添付するコードは次のようになりました。

$mailer->createAttachment( $data, Zend_Mime::TYPE_OCTETSTREAM, Zend_Mime::DISPOSITION_ATTACHMENT, Zend_Mime::ENCODING_BASE64, 'icalendar-file.ics' );
      
      







最初の実行可能なバージョンを取得する前に、さまざまなアプローチを試みましたが、解決策はよくあることですが、非常にシンプルでした。 Gmailからの招待状を調べたところ、Content-Dispositionヘッダーがないことがわかりました。 添付ファイルはインラインでレターに追加されます。 サービスによって生成された電子メールにContent-disposition:インラインヘッダーを設定し、添付ファイルのContent-typeを変更してファイルの種類を示し、method = REQUESTを追加して、Outlookが電子メールを招待として受け入れ、「奇跡が起こった」:リンク「追加カレンダーに」、Outlookはイベントへの招待としてレターを表示し始めました。



ZendFrameworkのソリューション:

 $mailer->createAttachment( $data, 'text/calendar; charset=UTF-8; method=REQUEST', Zend_Mime::DISPOSITION_INLINE, Zend_Mime::ENCODING_BASE64, 'icalendar-file.ics' ); $mailer->setType(Zend_Mime::MULTIPART_ALTERNATIVE);
      
      





multipart / alternative-さまざまなタイプのコンテンツ/タイプがメッセージパーツで使用されることを示します。



これはEvolutionでどのように見えるかです:

画像



そして、Outlookで:

画像



ソリューションの作成者であるプログラマーのDmitryは、残念ながらハブのアカウントを持っていないため、質問に答えます。



All Articles