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

Discussione in 'PHP' iniziata da Giulo77, 5 Settembre 2018.

  1. Giulo77

    Giulo77 Nuovo Utente

    Registrato:
    15 Marzo 2018
    Messaggi:
    22
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    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 != && $flmailref == && $mailReferente != '' && $mailReferente != $_SESSION['mailerAddress']) {$mail->addAddress($mailReferente); $contaMail++;}
            if (
    $flmailcontatto == && $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 == && $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 == && $_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($email20, -1);}   
                else {
    $parz2 $email2;}         
                if (
    substr($email1, -1) == ";") {$elencoMail $email1 $parz2;}   
                else {
    $elencoMail $email1 ";" $parz2;}           
              }   
              else
              {
                if (
    substr($email1, -1) == ";") {$elencoMail substr($email10, -1);}   
                else {
    $elencoMail $email1;}           
              }             
            }
            else
            {
              if (
    $email2 != '')
              {
                if (
    substr($email2, -1) == ";") {$elencoMail substr($email20, -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');}}
     
Sto caricando...

Condividi questa Pagina