Table des Matières du Kit Mail     Index du Kit Mail

Le Daemon de Mail

Hérité de: néant

Declaré dans: be/kit/mail/E-mail.h

Librarie: libmail.so

Tout ordinateur faisant tourner BeOS a un daemon de mail; Il s'agit d'un processus local à cet ordinateur dont la responsabilité est d'envoyer et recevoir des e-mails d'un serveur de mail. Le serveur de mail avec lequel le daemon interagit est une application réseau qui soit fait partie des services de votre Fournisseur d'Accès Internet, soit tourne sur une machine locale faisant office de "stockeur de mails".

Les fonctions décrites dans cette section vous disent comment gérer la connection entre le daemon de mail et le serveur de mail -- comment demander au daemon de communiquer avec un serveur donné, comment dire au daemon d'envoyer et relever les e-mails, comment rendre la relève du courrier automatique ...etc

Beaucoup des fonctions décrites ici sont accessibles à l'utilisateur par l'intermédiaire de l'application Préferences E-mail. Ces fonctions ne devraient en géneral pas être utilisées; les réglages qu'elles contrôlent sont ceux de l'utilisateur, et votre application devrait à priori éviter de changer les réglages de l'utilisateur. La seule raison valable d'utiliser ces fonctions de configuration est le cas où vous développez votre propre application de Préferences E-mail.

Les autres fonctions, telles que forward_mail(), check_for_mail(), encode_base64(), et decode_base64(), peuvent être légitimement utilisées par votre programme d'e-mail.

L'architecture d'un message e-mail n'est pas evoquée ici; réferrez vous a "Messages de Mail (BMailMessage)" pour plus d'informations à ce sujet.


Le Daemon de Mail et le Serveur de Mail

Le daemon de mail est capable de dialoguer avec deux sortes de serveurs differents:

Les serveurs POP et SMTP sont identifiés par leur nom d'hôte (autrement dit, le nom des machines sur lesquelles les serveurs tournent). Le daemon de mail ne peut dialoguer qu'avec un seul serveur POP et un seul serveur SMTP en même temps, mais ces deux types de dialogue peuvent avoir lieu simultanément. En géneral -- mais pas toujours -- les serveurs POP et SMTP résident sur la même machine et sont identifiés par le même nom.

Pour définir l'identité de l'hôte POP, remplissez les champs d'une structure mail_pop_account et passez cette structure à la fonction set_pop_account() Comme le nom de la structure le laisse deviner, mail_pop_account encode plus que juste le nom d'hôte du serveur. Elle identifie aussi un compte POP utilisateur en particulier; la définition complète de la structure est la suivante:

   typedef struct
   {
      char pop_name[B_MAX_USER_NAME_LENGTH];
      char pop_password[B_MAX_USER_NAME_LENGTH];
      char pop_host[B_MAX_HOST_NAME_LENGTH];
      char real_name[128];
      char reply_to[128];
      int32 days;
      int32 interval;
      int32 begin_time;
      int32 end_time;
   } mail_pop_account;

Les champs pop_name, pop_password, et pop_host dans la structure mail_pop_account representent le nom d'utilisateur, mot de passe, et hôte du serveur POP de l'utilisateur d'e-mail. Le champ real_name est le nom réel de l'utilisateur, et reply_to est l'adresse e-mail à laquelle les réponses doivent être envoyées.

Le champ days peut contenir un des champs suivant pour spécifier quels jours de la semaine le daemon de mail doit automatiquement relever le courrier du compte e-mail concerné:

Constante Signification
B_CHECK_NEVER Ne pas relever le courrier automatiquement pour ce compte.
B_CHECK_WEEKDAYS Relever le courrier uniquement en semaine. (jours ouvrables? - NdT)
B_CHECK_DAILY Relever le courrier tous les jours.
B_CHECK_CONTINUOUSLY Relever le courrier en continu tous les jours.

Le champ interval spécifie combien de secondes devraient séparer chaque relève de courrier, tandis que begin_time et end_time specifient à quel moment de la journée (en secondes) cette relève automatique devrait commencer et finir.

Le serveur SMTP peut être selectionné en appelant set_smtp_host(), en lui passant un pointeur sur le nom d'hôte SMTP.


Envoyer et Recevoir du Courrier

Les Messages récuperés (depuis le serveur de mail) par le daemon de mail sont stockés dans des fichiers individuels sur le disque dur de l'utilisateur, d'où ils sont cueillis et affichés dans une application destinée à la lecture du courrier (un "lecteur de mail"; Be fournit un lecteur de mail simple appelé BeMail). De même, les messages composés (dans une application de rédaction de mail) et envoyés par l'utilisateur sont stockés dans des fichiers individuels jusqu'à ce que le daemon de mail entre en action et les fasse parvenir au serveur de mail.

L'envoi et la réception de mail constituent la fonctionnalité la plus importante du daemon de mail. Les deux actions (transmission serveur-base-de-données et base-de-données-serveur) sont effectuées via l'appel de la fonction check_for_mail() .

La classe BMailMessage fournit une moyen pratique de créer et d'envoyer de nouveau messages de mail; visitez la section dediée a cette classe pour plus d'information et un exemple simple.

Le courrier récuperé par le daemon de mail peut être localisé et faire l'objet d'une requête en utilisant les attributs de mail definis dans le Kit de Mail. En utilisant la classe BQuery, vous pouvez parcourir tous les messages de mail qui viennent d'arriver et parser chacun des fichiers pour montrer les messages à l'utilisateur. Pour une discussion en profondeur des attributs de mail et de la manière de les utiliser à votre avantage, lire "Effectuer des Requêtes de Mail".


Autres Fonctionnalités du Daemon de Mail

Les autres structures et fonctions de mail définissent le reste des fonctionnalités offertes par le daemon de mail. Ces fonctionnalités sont:


Fonctions


check_for_mail()

                                                         
  

status_t check_for_mail(int32 *incoming_count = NULL)

Envoie et reçoit du courrier. Plus précisement, cette function demande au daemon de mail de récuperer les messages entrants à partir du serveur POP et envoie tout message sortant en attente au serveur SMTP. Le nombre de messages POP récuperés est stocké dans la variable pointée par incoming_count. Si vous spécifiez NULL pour incoming_count, check_for_mail() ne retournera pas le nombre de messages récuperés. Vous devriez specifier NULL à moins de vraiment vouloir savoir combien de messages ont été récuperés, car le fait de demander cette information peut potentiellement ralentir le processus de réception.

Si tout est bien dans le meilleur des mondes mail, cette fonction retourne B_OK; autrement, elle retourne un très utile code de retour.

CODES DE RETOUR


count_pop_accounts()

                                                         
  

int32 count_pop_accounts(void)

Retourne le nombre de comptes POP configurés.

 
La daemon de mail n'implémente actuellement qu'un seul compte POP, cette fonction retourne donc toujours 1. Vous ne devriez pourtant pas partir du principe qu'il n'existe qu'un seul compte POP, cela changera probablement à l'avenir.



decode_base64()

                                                         
  

ssize_t decode_base64(char *out, char *in, off_t length, bool replace_cr = false)

Décode les données base-64 pointées par in, qui est de longueur length octets, et écrit le résultat decodé dans le tampon mémoire pointé par out. Si replace_cr a pour valeur true, les caractères retour-chariot du résultat sont convertis en sauts-de-lignes, autrement les données sont retournées dans leur format d'origine, inchangé.

Pour une utilisation typique on utilise géneralement replace_cr avec la valeur true pour décoder un document texte ASCII, et à false pour décoder un fichier binaire.

Cette fonction retourne la taille des données résultat écrites dans le tampon mémoire out.

 
Vous devez être certain par avance que le tampon mémoire cible est suffisament grand pour contenir les données décodées, sinon cette fonction fera de vilaines choses.



encode_base64()

                                                         
  

ssize_t encode_base64(char *out, char *in, off_t length)

Encode les données pointées par in, qui est de longueur length octets, et écrit le résultat encodé en base-64 dans le tampon mémoire pointé par out.

Cette fonction retourne la taille des données résultat écrites dans out.

 
Vous devez être certain par avance que le tampon mémoire cible est suffisament grand pour contenir les données encodées, sinon cette fonction fera de vilaines choses.



forward_mail()

                                                         
  

status_t forward_mail(entry_ref *message_ref, const char *recipients,
      bool now = true)

"Forwarde" le message de mail specifié par message_ref à la liste d'utilisateurs donnée par recipients. La liste de nom d'utilisateurs spécifiée dans recipients doit être séparée par des virgules et/ou des blancs, and doit être terminée par le caractère nul.

Si le paramètre now a pour valeur true, les messages seront envoyés immédiatement; s'il a pour valeur false, les messages seront ajoutés en fin de liste des messages à envoyer la prochaine fois que check_for_mail() est appelé, ou la prochaine fois que le daemon de mail effectue une relève automatique du mail.

CODES DE RETOUR


get_mail_notification() , set_mail_notification()

                                                         
  

status_t get_mail_notification(mail_notification *notification_settings)

status_t set_mail_notification(mail_notification *notification_settings,
      bool save = true)

get_mail_notification() remplit la structure mail_notification spécifiée avec des informations décrivant comment l'utilisateur serait averti de la reception d'un mail s'il en arrivait un maintenant. Il existe deux type de signaux de notification: la fenêtre d'alerte de courrier et le bip système. La structure mail_notification se présente ainsi:

   typedef struct
   {
      bool alert;
      bool beep;
   } mail_notification;

get_mail_notification() retourne toujours B_OK. Si le réglage actuel ne peut pas être examiné (par exemple, si l'utilisateur n'a jamais configuré son mail), alert sera retourné sous la forme de la valeur par défaut false, et beep aura pour valeur true.

set_mail_notification() prend un pointeur vers une structure mail_notification et configure le système pour avertir de l'arrivée de courrier en utilisant les moyens spécifiés ici même. Si l'argument save a pour valeur true, le changement est interpreté comme étant le nouveau comportement par défaut et sera memorisé après que l'ordinateur ait été éteint. S'il a pour valeur false, le changement est temporaire.

CODES DE RETOUR


get_pop_account() , set_pop_account()

                                                         
  

status_t get_pop_account(mail_pop_account *account_info, int32 index = 0)

status_t set_pop_account(mail_pop_account *account_info, int32 index = 0)

Récupère et écrit les informations de compte POP spécifiées. La structure mail_pop_account est définie ainsi:

   typedef struct
   {
      char pop_name[B_MAX_USER_NAME_LENGTH];
      char pop_password[B_MAX_USER_NAME_LENGTH];
      char pop_host[B_MAX_HOST_NAME_LENGTH];
      char real_name[128];
      char reply_to[128];
      int32 days;
      int32 interval;
      int32 begin_time;
      int32 end_time;
   } mail_pop_account;

Les champs pop_name, pop_password, et pop_host dans la structure mail_pop_account représentent the nom d'utilisateur, mot de passe, et serveur POP de l'e-mail utilisateur. Le champ real_name est le nom réel de l'utilisateure, et reply_to est l'adresse e-mail à laquelle les réponses devraient être envoyées.

Le champ days peut contenir l'une des constantes suivantes pour spécifier quels jour de la semaine le daemon de mail devrait automatiquement relever le courrier du compte décrit:

Constante Signification
B_CHECK_NEVER Ne pas relever le mail automatiquement sur ce compte.
B_CHECK_WEEKDAYS Relever le courrier uniquement en semaine.
B_CHECK_DAILY Relever le mail tous les jours.
B_CHECK_CONTINUOUSLY Relever le mail en continu tous les jours.

Le champ interval spécifie combien de secondes devraient s'ecouler entre deux récuperations du mail, et les paramètres begin_time et end_time spécifient à quel moment de la journée (en secondes) la récuperation automatique devrait commencer et finir. Si begin_time et end_time ont la même valeur, le daemon récupere le mail toute la journée (NdT: "round the clock"?).

 
Ces fonctions devraient ultérieurement supporter plusieurs comptes POP; pour le moment, le Kit Mail ne supporte qu'un seul compte POP, vous devez donc utiliser un index de 0. Tout autre index entrainera une erreur B_BAD_INDEX.


get_pop_account() remplit la structure mail_pop_account spécifiée avec les informations relatives au compte POP, et set_pop_account() prend les informations du buffer et les sauve en tant que nouveau réglage par defaut.

CODES DE RETOUR


get_smtp_host() , set_smtp_host()

                                                         
  

status_t get_smtp_host(char *smtp_host)

status_t set_smtp_host(char *smtp_host, bool save = true)

get_smtp_host() retourne dans le tampon mémoire pointé par smtp_host le nom de l'hôte SMTP tel que actuellement configuré. Le tampon doit être long d'au moins B_MAX_HOST_NAME_LENGTH octets.

set_smtp_host() modifie l'hôte SMTP par l'intermédiaire duquel le courrier sera envoyé à l'avenir, pour utiliser l'hôte spécifié. Si save a pour valeur true, le nouveau réglage devient celui par défaut et sera persistent après un redémarrage de l'ordinateur; autrement, le changement est temporaire.

CODES DE RETOUR


send_queued_mail()

                                                         
  

status_t send_queued_mail(void)

Dit au daemon de mail d'envoyer tous les mails sortants en attente.

CODES DE RETOUR


Table des Matières du Kit Mail     Index du Kit Mail


The Be Book,
...in lovely HTML...
for BeOS Release 5.

Copyright © 2000 Be, Inc. All rights reserved..