Comment implémenter l'API Gmail OAuth pour envoyer des emails (notamment via SMTP)?
Je suis de développement d'une application web qui permettra d'envoyer des e-mails au nom de l'utilisateur connecté.
Je suis en train d'utiliser le nouveau Gmail protocole d'authentification OAuth a annoncé décrit ici pour envoyer ces e-mails par l'utilisateur du compte Gmail (de préférence à l'aide de SMTP plutôt que IMAP, mais je suis facile). Toutefois, l'exemple de code PHP me donne un couple de problèmes.
- Tous les exemples de code est basé sur le protocole IMAP, pas de SMTP. Pourquoi "soutien" le protocole SMTP si vous n'allez pas à montrer aux gens comment l'utiliser?
- L'exemple de code me donne une erreur fatale à partir d'une portion non utilisée du Zend exception -- il ne peut pas trouver la "BOÎTE de réception" le dossier.
Fatal error: Uncaught exception 'Zend_Mail_Storage_Exception' avec le message "impossible de changer de dossier, peut-être que ça n'existe pas" en chemin\vers\xoauth-php-samples\Zend\Mail\Stockage\Imap.php:467 Stack trace: #0 path\to\xoauth-php-samples\Zend\Mail\Storage\Imap.php(248): Zend_Mail_Storage_Imap->selectFolder('BOÎTE de réception') #1 path\to\xoauth-php-samples\three-legged.php(184): Zend_Mail_Storage_Imap->__construct(Objet(Zend_Mail_Protocol_Imap)) #2 {principal} Prochaine exception Zend_Mail_Storage_Exception' with message 'impossible de sélectionner la BOÎTE de réception, est-ce un transport valable?" dans la chemin\vers\xoauth-php-samples\Zend\Mail\Stockage\Imap.php:254 Stack trace: #0 path\to\xoauth-php-samples\three-legged.php(184): Zend_Mail_Storage_Imap->__construct(Objet(Zend_Mail_Protocol_Imap)) #1 {principal} dans path\to\xoauth-php-samples\Zend\Mail\Storage\Imap.php sur la ligne 254
J'ai vérifié que je suis de bonne OAuth jetons en arrière, je ne sais pas comment conclure la transaction électronique arriver. Ce protocole est encore assez nouveau, donc il n'y a pas beaucoup non officiel de la communauté de la documentation à ce sujet, et les docs officielles sont unhelpfully sec des choses à propos de la RFC SMTP. Donc, si quelqu'un peut aider à obtenir ce que ça va, j'en serais très heureux.
Remarque: j'ai déjà été en mesure de se connecter à Gmail serveur SMTP via SSL et envoyer un e-mail, à condition que l'utilisateur a donné à ma demande son nom d'utilisateur Gmail et mot de passe. Je voudrais éviter cette méthode, car elle encourage le phishing et soucieux de la sécurité des utilisateurs ne sera pas l'accepter. Cette question n'est pas à ce sujet.
source d'informationauteur Curtis Gibby
Vous devez vous connecter pour publier un commentaire.
Je suis à l'aide d'un compte Google Apps et essayer de créer une application qui permet aux utilisateurs d'envoyer des messages via SMTP via la nouvelle autorisation Oauth. J'ai été en mesure de le faire fonctionner à l'aide de certains des renseignements sur cette discussion. Cependant, je pense que je me dois de préciser une ou deux choses que je suis tombé sur...
1) Le Zend framework pour SMTP apparemment recherche automatiquement dans le Zend/Mail/Protocole/Smtp/Auth dossier pour un nom de fichier .php dans ce cas "Xoauth.php" qui n'existent normalement dans Zend, à moins de créer. J'ai été en mesure de le faire avec succès par la copie de l'existant Login.php fichier Xoauth.php et en le modifiant légèrement les suggestions faites sur cette page web.
Cela a été très utile, mais il n'est qu'une partie de la Xoauth.php fichier (Modifier une copie de login.php et vous verrez une zone équivalente):
2) Notez que vous devriez vraiment avoir Zend sur le include_path de PHP, même si vous faites référence directement en PHP, car il peut essayer de référence lui-même avec ses Loader.php fichier sans l'aide d'un chemin d'accès explicite.
3) en plus de la suppression de l'évident IMAP fonctions et de le remplacer par l'équivalent fonctions SMTP je n'ai pas besoin de modifier le code de la Google OAuth échantillons pour PHP. J'ai fait l'Zend/Mail.php fichier afin de l'Envoyer, et ajouter le code nécessaire pour pouvoir envoyer des e-mail pour que le test fonctionne.
Êtes-vous à l'aide d'un compte Google Apps?
Lors de la redirection vers le OAuthAuthorize jeton d'URL, j'ai été, à tort, la spécification hd=par défaut. Ceci dit l'OAuth point de terminaison d'autoriser un jeton pour un compte Google et il ne PAS travailler avec Google Apps.
Donc, dans three-legged.php, remplacer la ligne qui dit:
avec
Et tout devrait bien se passer-- il vous sera demandé de choisir entre le consommateur et compte Google Apps si connecté avec les deux.
Espère que cette aide-- je vais être patcher le code pour résoudre ce problème.
Cheers,
-Ryan
#
Re à l'aide de SMTP-- je n'ai pas eu pleinement pourtant, dans un sens c'est bien documentés-- mais voici les bases.
1) Créer Zend/Mail/Protocol/Smtp/Auth/Xoauth.php où l'auth() la méthode est assez simple:
2) Générer $initClientRequest légèrement différemment, que les changements de l'URL pour SMTP contre IMAP
3) Envoyer des messages tels que les suivants:
Je vais essayer de créer quelque chose de mieux documentées-- qui ne nécessite pas la création de classes dans le Zend 'espace de noms", mais il aurait probablement besoin d'étendre Zend_Mail_Transport_Smtp trop à cause de la façon _sendMail() est écrit en charge auth classes seulement à partir de la Zend_Mail_Protocol_Smtp_Auth_* 'package'