2011-07-28 3 views
2

Est-ce que quelqu'un a déjà réussi à trouver la méthode pour modifier les champs to, cc et bcc d'un message sortant dans un plugin Mail.app? J'ai regardé à travers les fichiers d'en-tête en essayant de comprendre exactement ce que je devais faire pour obtenir la liste des destinataires du message, et avoir la possibilité de les modifier (en particulier, pour supprimer certains destinataires et basculer les destinataires restants bcc'ed).Lecture et modification par programmation des champs to/cc/bcc dans un plugin Mail.app

Note: Je sais où je devrais regarder pour savoir comment faire ceci, mais j'ai passé un certain temps là-dessus et il y a beaucoup de classes différentes qui font ceci et la quantité de devinette nécessaire est non triviale . J'espčre simplement que quelqu'un a déjà traversé ça par le passé et peut me sauver de l'effort dupliqué.

Répondre

1

Compris!

La fenêtre que vous utilisez pour composer un message est un MailDocumentEditor, qui hérite de DocumentEditor. DocumentEditor possède une variable d'instance appelée _headersEditor, qui est un objet HeadersEditor. HeadersEditor a des variables d'instance pour les champs to, cc et bcc, respectivement nommés _toField, _ccField et _bccField. Ce sont des instances de AddressTextField.

Il existe des méthodes permettant d'obtenir les adresses qui ont été entrées dans AddressTextField. Si vous connaissez Mail, les adresses peuvent apparaître ici de différentes manières. Certains sont simplement des adresses texte, d'autres sont des jetons pour les entrées du carnet d'adresses (elles apparaissent donc comme des jetons avec le nom, que vous pouvez cliquer avec le bouton droit de la souris pour obtenir l'adresse e-mail). Vous pouvez créer des accesseurs pour les chaînes _stringsWithNoRecords et _stringsAwaitingRecords de NSMutableArray, ainsi que NSMutableDictionary * _recordsForStrings. Toutefois, pour définir les adresses de ces champs, créez un NSCell en utilisant initTextCell: (NSString *) avec les adresses e-mail que vous souhaitez dans ces champs. Ensuite, appelez la méthode setCell: sur AddressTextField. Cela remplacera le contenu de ce champ avec votre NSString dans le NSCell.

+0

Note: J'ai parlé trop tôt pour obtenir les adresses précédemment entrées. Obtenir _stringsWithNoRecords obtiendra les adresses e-mail en texte brut (en supposant que vous avez fait des commandes + pour enregistrer un brouillon en premier) mais il duplique parfois. Il n'obtient pas non plus les adresses e-mail à jeton (c'est-à-dire celles qu'il reconnaît). En outre, ni _stringsAwaitingRecords ni _recordsForStrings ne me donne aucun contenu (au moins dans Lion). Je mettrai à jour la réponse quand j'en saurai plus à ce sujet. Cependant, si vous savez déjà à qui vous envoyez, vous pouvez utiliser setCell: pour définir le contenu de AddressTextField. – Aaron

+0

Mise à jour: J'ai trouvé comment obtenir les adresses des destinataires en tant que chaînes! il suffit d'appeler la méthode backEnd sur le MessageEditor, qui a les méthodes toRecipients, ccRecipients et bccRecipients. Ce sont des objets NSArrays of MessageAddressee, dont la méthode d'adresse vous donnera l'adresse NSString. – Aaron

Questions connexes