2017-02-20 3 views
0

私のPHPプログラムはicsファイルを生成しますが、これは以前ほとんどの電子メールクライアントで動作していましたが、 「サポートされていないカレンダーのmessage.ics」という名前のicsファイルですが、ダブルクリックすると内容が正しく表示されます。私はインターネットを検索しますが、何らかの理由を見つけることはできません。誰もこの状況で助けてくれますか?助けのためのOutlook 2013は "not supported calendar message.ics"を表示しますが、Gmail、Outlook 2007は大丈夫です

BEGIN:VCALENDAR 
PRODID:-//MY COMPANY NAME//System iCal Generator//EN 
VERSION:2.0 
METHOD:REQUEST 
BEGIN:VEVENT 
DTSTART:20170314T180000Z 
DTEND:20170314T210000Z 
DTSTAMP:20170217T161443Z 
ORGANIZER;CN=name of event here:mailto:[email protected] 
ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE:[email protected]address.com 
SUMMARY:Test website for evet 
DESCRIPTION:xyz 
LOCATION:tbc 
SEQUENCE:0 
UID:[email protected] 
END:VEVENT 
END:VCALENDAR 

ありがとう:

は、ここで生成されたICSの一例です!

+0

Outlookでどのようなエラーが発生しますか? –

答えて

0

Outlookで予定を作成してから、.ics形式で保存してください。詳細はHow To Save A Selected Appointment As Ics File In Outlook?を参照してください。次に、保存されたファイルを開き、その内容をプログラムで生成されたものと比較することができます。

0

古いものですが、私の検索で出てくるので、私は先に進んで答えます。

奇妙な問題なしで私のイベントを受け入れるかどうかについて、新しいOutlookが非常に特に問題を抱えていました... そして実際には多くの行末が適切な行末に実際に来ました。私はVCalendarコード内で\r\nが使用されていることを確認しなければなりませんでしたが、UnixのPHPでは、実際の電子メールの新しい行に\nが使用されていることを確認しなければなりませんでした。ここで私は、各セクションの行末は、明示的かつ明白であるように、文字列の配列を使用して、最新の見通し、と協力してきたいくつかのコードは次のとおりです。

このコードは、ヘッダインジェクションを防ぐために何もしないことに注意してください。 責任を持って使用してください:)

<?php 
    date_default_timezone_set('America/New_York'); 
    //CONFIGURE HERE 
    $fromName   = "John Doe"; 
    $fromEmail   = "[email protected]"; 
    $toName    = "Your Name"; 
    $toEmail   = isset($_GET['to']) ? $_GET['to'] : '[email protected]'; 
    $start    = new DateTime('2017-08-15 15:00'); 
    $end    = new DateTime('2017-08-15 16:00'); 
    $summary   = "Hello World Event"; 
    //END CONFIGURATION 

    $uid    = ""; 
    $headers   = array(); 
    $boundary   = "_CAL_" . uniqid("B",true) . "_B_"; 
    $headers[]   = "MIME-Version: 1.0"; 
    $headers[]   = "Content-Type: multipart/alternative; boundary=\"".$boundary."\""; 
    $headers[]   = "To: \"{$toName}\" <{$toEmail}>"; 
    $headers[]   = "From: \"{$fromName}\" <{$fromEmail}>"; 

    $calendarLines  = array(
     "BEGIN:VCALENDAR", 
     "METHOD:REQUEST", 
     "PRODID:-//PHP//MeetingRequest//EN", 
     "VERSION:2.0", 
     "BEGIN:VEVENT", 
     "ORGANIZER;CN={$fromName}:MAILTO:{$fromEmail}", 
     "ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN={$toName}:MAILTO:{$toEmail}", 
     "DESCRIPTION:{$summary}", 
     "SUMMARY:{$summary}", 
     "DTSTART:".$start->setTimezone(new DateTimeZone('UTC'))->format('Ymd\THis\Z'), 
     "DTEND:".$end->setTimezone(new DateTimeZone('UTC'))->format('Ymd\THis\Z'), 
     "UID:{$uid}", 
     "CLASS:PUBLIC", 
     "PRIORITY:5", 
     "DTSTAMP:".gmdate('Ymd\THis\Z'), 
     "TRANSP:OPAQUE", 
     "STATUS:CONFIRMED", 
     "SEQUENCE:0", 
     "LOCATION:123 Any Street", 
     "BEGIN:VALARM", 
     "ACTION:DISPLAY", 
     "DESCRIPTION:REMINDER", 
     "TRIGGER;RELATED=START:-PT15M", 
     "END:VALARM", 
     "END:VEVENT", 
     "END:VCALENDAR" 
    ); 


    $calendarBase64  = base64_encode(implode("\r\n",$calendarLines)); 
    //ensure we don't have lines longer than 70 characters for older computers: 
    $calendarResult  = wordwrap($calendarBase64,68,"\n",true); 

    $emailLines = array(
     "--{$boundary}", 
     "Content-Type: text/html; charset=\"iso - 8859 - 1\"", 
     "Content-Transfer-Encoding: quoted-printable", 
     "", 
     "<html><body>", 
     "<h1>Hello World</h1>", 
     "<p>This is a calendar event test</p>", 
     "</body></html>", 
     "", 
     "--{$boundary}", 
     "Content-Type: text/calendar; charset=\"utf - 8\"; method=REQUEST", 
     "Content-Transfer-Encoding: base64", 
     "", 
     $calendarResult, 
     "", 
     "--{$boundary}--" 
    ); 
    $emailContent = implode("\n",$emailLines); 

    $headersResult  = implode("\n",$headers); 
    mail($toEmail, $summary, $emailContent, $headersResult); 
    echo("<pre>".htmlentities($headersResult)."\n\n".htmlentities($emailContent)."</pre>"); 
    echo("<br /><br />"); 
    echo("<pre>".base64_decode($calendarResult)."</pre>"); 

は、アプリケーション/これはないかと動作しないサイトにコメントを追加すること自由に感じなさい。どうも。

0

icalendarバリデーターをicalendarバリデーターでテストすると、https://icalendar.org/validator.htmlにあります。ATTENDEE行が75文字以上で、これがicalendarファイルの最大行サイズであることがわかりました。おそらくそれがなぜ機能していないのでしょうか?

関連する問題