[PHP] Creare appuntamento ed inviarlo tramite mail (Outlook e Gmail)

Giulo77

Utente Attivo
15 Mar 2018
30
0
6
46
Ciao a tutti,
la mia applicazione web prevede un'agenda da cui si possono prendere appuntamenti ed inviarli ad un determinato indirizzo mail. Il risultato che voglio ottenere è quello di farlo riconoscere da tutte le app mail in modo da poterlo inserire in automatico nel calendario dell'utente.
Attualmente uso PHPMailer ed invio in allegato un file ics ma il risultato è che solo GMail è in grado di riconoscerlo automaticamente e quindi di propormi i classici tasti Si/No/Forse; di conseguenza per il momento ho incluso nel corpo mail il messaggio che se non viene riconosciuto automaticamente di cliccare sull'allegato. In questo modo ad esempio su outlook mi fa comparire la form con accetta/rifiuta.
Le prove che ho fatto sono le seguenti:
Creare un appuntamento da outlook ed inviarlo su windows live mail che non aggiorno da una vita e che quindi non lo riconosce sicuro in auto ed ho visto che arriva una mail con l'oggetto e con l'ics in allegato (Quindi non c'è dubbio che anche outlook persegue la via di allegare un file ics).
Creato ics identico ad uno fatto in outlook (Quindi stesse proprietà, orari, fusi, RSVP dei partecipanti, ecc...)
Sempre con Windows live mail posso vedere tutte le proprietà dalla mail e a parte qualcosina nell'header ho potuto verificare che entrambi hanno in coda tutto il file ics in formato base64
Non so più dove sbattere la testa, non mi piace è poco funzionale il fatto di dover cliccare sull'allegato. Ci deve essere qualche proprietà per cui la app mail leggono e riconoscono che è un appuntamento tipo outlook. Esempio l'app mail della samsung lo riconosce e quindi non stiamo parlando solo ed esclusivamente di outlook.
Qualcuno di voi ha mai sperimentato una cosa del genere? il 90% degli utilizzatori hanno outlook quindi preferirei che succedesse al contrario, cioè clicco per Gmail e va in auto per outlook.

So che outlook è un po' carente, ad esempio una volta inserito l'appuntamento non posso vedere i partecipanti (li ho inclusi nel testo delle note); questo avviene anche se si esporta un appuntamento inserito originariamente da outlook e lo si reimporta nello stesso calendario, quindi direi un bug strasegnalato e mai calcolato da microsoft (fino alla versione 2003 funzionava).

Allego in ogni caso la parte di codice dove creo mail ed allegato ics:

PHP:
        $mail = new PHPMailer();
        $mail->IsSMTP();
        $mail->SMTPDebug = 0;   
        $mail->SMTPSecure = $_SESSION['SMTPSecure'];
        $mail->Host       = $_SESSION['mailerServer'];
        $mail->Port       = $_SESSION['STMPPort'];
        $mail->SMTPAuth   = true;
        $mail->Username   = $_SESSION['mailerAddress'];
        $mail->Password   = $_SESSION['mailerPassword'];
        $mail->SMTPOptions = array(
            'ssl' => array(
                'verify_peer' => false,
                'verify_peer_name' => false,
                'allow_self_signed' => true
            )
        );
        $mail->IsHTML(true);     
        $mail->CharSet='utf-8';
    
        $mail->From = $_SESSION['mailerAddress'];
        $mail->FromName = $_SESSION['login_name'];
        $contaMail = 0;         
        if ($idutente != 0 && $flmailref == 1 && $mailReferente != '' && $mailReferente != $_SESSION['mailerAddress']) {$mail->addAddress($mailReferente); $contaMail++;}
        if ($flmailcontatto == 1 && $email1 != '')
        {
          $indirizziMail = explode(";", $email1);
          $numMail = count($indirizziMail);
          for ($i = 0; $i < $numMail; $i++)
          {
            $indirizzoMail = '';
            $lastChar = trim(substr($indirizziMail[$i], -1));
            if ($lastChar != ")") {$indirizzoMail = $indirizziMail[$i];}
            else
            {
              $firstChar = strpos($indirizziMail[$i], "(");
              if ($firstChar !== false) {$indirizzoMail = substr($indirizziMail[$i], $firstChar + 1, $lastChar - $firstChar - 1);}
            }
            if ($indirizzoMail != '' && $indirizzoMail != $_SESSION['mailerAddress']){$mail->addAddress($indirizzoMail); $contaMail++;}
          }
        }
        if ($flmailcontatto == 1 && $email2 != '')
        {
          $indirizziMail = explode(";", $email2);
          $numMail = count($indirizziMail);
          for ($i = 0; $i < $numMail; $i++)
          {
            $indirizzoMail = '';
            $lastChar = trim(substr($indirizziMail[$i], -1));
            if ($lastChar != ")") {$indirizzoMail = $indirizziMail[$i];}
            else
            {
              $firstChar = strpos($indirizziMail[$i], "(");
              if ($firstChar !== false) {$indirizzoMail = substr($indirizziMail[$i], $firstChar + 1, $lastChar - $firstChar - 1);}
            }         
            if ($indirizzoMail != '' && $indirizzoMail != $_SESSION['mailerAddress']){$mail->addAddress($indirizzoMail); $contaMail++;}
          }
        }
        if ($flmailutente == 1 && $_SESSION['login_email'] != '' && $_SESSION['login_email'] != $_SESSION['mailerAddress']) {$mail->addAddress($_SESSION['login_email']); $contaMail++;}
      
        $mail->AddCustomHeader("X-Confirm-Reading-To: " . $_SESSION['mailerAddress']);
        $mail->AddCustomHeader("Return-receipt-To: " . $_SESSION['mailerAddress']);
        $mail->AddCustomHeader("Disposition-Notification-To: " . $_SESSION['mailerAddress']);           

        $ical = "BEGIN:VCALENDAR\r\n";
        $ical .= "VERSION:2.0\r\n";
        $ical .= "PRODID:-//Microsoft Corporation//Outlook 12.0 MIMEDIR//EN\r\n";
        $ical .= "METHOD:REQUEST\r\n";
        $ical .= "X-MS-OLK-FORCEINSPECTOROPEN:TRUE\r\n";
        $ical .= "BEGIN:VEVENT\r\n";
        $ical .= "ORGANIZER;CN=\"" . trim(str_replace(str_split('\\/:*?"<>|,;'), '', $_SESSION['login_name'])) . "\":mailto:" . $_SESSION['mailerAddress'] . "\r\n";
        $ical .= "ATTENDEE;CN=\"" . trim(str_replace(str_split('\\/:*?"<>|,;'), '', $referente)) . "\";ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE:mailto:" . $mailReferente . "\r\n";
        $elencoMail = '';
        if ($email1 != '')
        {
          if ($email2 != '')
          {
            if (substr($email2, -1) == ";") {$parz2 = substr($email2, 0, -1);}   
            else {$parz2 = $email2;}         
            if (substr($email1, -1) == ";") {$elencoMail = $email1 . $parz2;}   
            else {$elencoMail = $email1 . ";" . $parz2;}           
          }   
          else
          {
            if (substr($email1, -1) == ";") {$elencoMail = substr($email1, 0, -1);}   
            else {$elencoMail = $email1;}           
          }             
        }
        else
        {
          if ($email2 != '')
          {
            if (substr($email2, -1) == ";") {$elencoMail = substr($email2, 0, -1);}   
            else {$elencoMail = $email2;}           
          }         
        }
        if ($elencoMail != '')
        {
          $indirizziMail = explode(";", $elencoMail);
          $numMail = count($indirizziMail);     
          for ($i = 0; $i < $numMail; $i++)
          {
            $nominativo = '';
            $indirizzoMail = '';   
            $lastChar = trim(substr($indirizziMail[$i], -1));
            if ($lastChar != ")")
            {
              if ($i == 0)
              {
                $nominativo = $nome;
                $indirizzoMail = $indirizziMail[$i];
              }
              else
              {
                $nominativo = $indirizziMail[$i];
                $indirizzoMail = $indirizziMail[$i];
              }
            }
            else
            {
              $firstChar = strpos($indirizziMail[$i], "(");
              if ($firstChar !== false) {$indirizzoMail = substr($indirizziMail[$i], $firstChar + 1, $lastChar - $firstChar - 1);}
              if ($indirizzoMail != '') {$nominativo = substr($indirizziMail[$i], 0, $firstChar - 1);}
            }   
            if ($nominativo != '' && $indirizzoMail != ''){$ical .= "ATTENDEE;CN=\"" . trim(str_replace(str_split('\\/:*?"<>|,;'), '', $nominativo)) . "\";ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE:mailto:" . trim($indirizzoMail) . "\r\n";}
          }       
        }           
        $ical .= "X-WR-RELCALID:" . $meeting_id . "\r\n";
        $ical .= "X-MICROSOFT-CDO-BUSYSTATUS:FREE\r\n";
        $ical .= "UID:" . $meeting_id . "\r\n";
        $ical .= "DTSTAMP:" . date('Ymd').'T'.date('His') . "\r\n";
        $ical .= "SEQUENCE:" . $sequence . "\r\n";
        $ical .= "STATUS:" . $status . "\r\n";
        $ical .= "DTSTART:" . $startTime . "\r\n";
        $ical .= "DTEND:" . $endTime . "\r\n";
        $ical .= "DESCRIPTION:" . $description . "\r\n";
        $ical .= "LOCATION:" . $luogo . ($info ? " - " . trim($info) : '') . "\r\n";
        $ical .= "SUMMARY:" .$title . "\r\n";
        $ical .= "X-ALT-DESC;FMTTYPE=text/html:<html><body style='font-family:calibri; font-size:11pt'>" . str_replace("\\n", "<br>", $description) . "<body><html>\r\n";
        $ical .= "BEGIN:VALARM\r\n";
        $ical .= "TRIGGER:-PT15M\r\n";
        $ical .= "ACTION:DISPLAY\r\n";
        $ical .= "DESCRIPTION:Reminder\r\n";
        $ical .= "END:VALARM\r\n";
        $ical .= "END:VEVENT\r\n";
        $ical .= "END:VCALENDAR\r\n";
 
        $mail->Subject = $oggetto;
        if ($fllogo == 1) {$mail->AddEmbeddedImage ('../images/LogoMail.jpg', 'logoimg', 'LogoMail.jpg');}           
        $mail->Body = "<html><body style='font-family:calibri; font-size:11pt'>N.B. Se l'appuntamento non si apre automaticamente fare click sull'allegato.<br><br>" . $body . "</body></html>";
        $mail->Ical = $ical;
        $mail->addStringAttachment($ical, 'event.ics', 'base64', 'text/calendar');

if ($contaMail > 0){if(!$mail->Send()){die('Errore invio mail per nuovo appuntamento');}}
 
Discussioni simili
Autore Titolo Forum Risposte Data
U PHP creare un file excel dopo ricerca nel DB PHP 0
G [PHP] Creare script di prenotazione con controllo disponibilità. PHP 7
S Libreria PHP per creare file dwg o dxf PHP 0
J creare pagina php di prenotazione PHP 5
F [PHP] creare tabella e tasto cerca PHP 3
B [PHP] Creare PDF dopo inserimento dati form PHP 4
R [PHP] Creare sistema random PHP 3
D [PHP] Consigli su come creare form PHP 1
T [PHP] Creare Honeypot per form contatti PHP 10
S [PHP] Creare collegamento filtri di ricerca al database PHP 6
Z Creare VirtualHost Apache2 con PHP? Programmazione 0
T con oop creare un ciclo per una pagina dinamica html con php PHP 3
E [PHP] creare temporary table per dati da xml PHP 2
R [PHP] creare pagina profilo per ogni utente PHP 4
M [PHP] Creare un menu a tendina con pdo PHP 18
G [PHP] Creare mail con allegato nascosto e bottone di richiamo PHP 0
C [PHP] Creare un Pulsante che ricopia valori di un campo in altro record PHP 4
Shyson [WordPress] [PHP] Creare codice che evidenzia nuovi articoli WordPress 0
ANDREA20 creare sito in php PHP 6
F [PHP] Creare un'area web riservata PHP 13
S [PHP] [HTML] Come creare un grafico dinamico PHP 4
V Creare tabella mysql con php non funziona PHP 1
M Creare tabella da pagina php popolata con valori passati con POST PHP 5
B [PHP] hp script creare un utente diminuendo -1 e cosi via PHP 1
AntoCastro [PHP] Creare un sito di quiz a catena PHP 17
V Creare funzioni PHP per agevolare bootstrap PHP 1
B funzioni per creare file e inserirli dentro una certa cartella in php? PHP 1
F Creare pagina PHP come quella di phpMyadmin PHP 12
M Creare tabella da pulsante php PHP 6
M Creare un exe da un listato php PHP 5
P [PHP] Creare un elenco completo con tabella PHP 3
Zea [PHP] RISOLTO - creare link con il risultato dell'interrogazione db PHP 1
utente è possibile creare una pagina php che copia interamente il contenuto di un'altra pagina ? PHP 10
A [PHP] Creare numero ticket casuale PHP 5
giannit [PHP] Creare pagina con collegamenti ipertestuali da file txt PHP 6
B [PHP] Creare un'interfaccia di inserimento testo in varie posizioni PHP 1
sandropochi [PHP] Form per creare filtro di ricerca su DB PHP 8
L [PHP] Creare un uploader di file csv xls e ricercare i risultati PHP 0
Zayciho [PHP] Creare sito web dinamico PHP 5
P [PHP] Creare elenco immagini PHP 2
L [php e xml] per creare una galleria fotografica con diversi file xml PHP 0
M [PHP] Creare chart con highchart PHP 6
T [PHP]Creare cookie PHP 5
Monital [PHP] Creare un array da stringa con diversi spazi PHP 3
P [PHP] come creare una chat PHP 24
trattorino Creare codice php help PHP 26
R [PHP] [HTML] Creare script invio modulo contatti PHP 2
romeocharly Creare un script/codice in php per collegare un id mysql con un file PHP 0
S PHP: creare un link in una pagina PHP 7
D Cerco Collaboratore in gradio di creare siti in wordpress, joomla, e PHP Offerte e Richieste di Lavoro e/o Collaborazione 7

Discussioni simili