Question

Je récupérer du texte brut (en-tête comprend, et le message) à partir d'un serveur POP. Je dois tout de capture après l'en-tête qui se termine par une ligne vide entre elle et le message d'utilisateur.

En même temps, je suis désireux d'ignorer quoi que ce soit des messages d'origine si elle est une réponse. Le début d'une réponse pour les courriels que je suis le parsing départ avec

------Original Message------

Un courriel exemple pourrait ressembler à ceci

  

Return-Path: ...
  ...
  Plus Email métadonnées: ...

     

Bonjour de la terre regex, je suis heureux de vous entendre.
  ------ ------ Original Message
  Métadonnées: ...
  ...

     

Hey mec regex, pouvez-vous me aider? Merci!

     

Sincèrement, moi.

Je dois extraire « Bonjour de la terre regex, je suis heureux de vous entendre. » et tout autre texte / lignes avant le message d'origine.

J'utilise cette expression rationnelle en ce moment (C # en mode multiligne) et il semble fonctionner sauf qu'il est la capture ------ ------ Original Message si le corps est vide. Je préfère avoir juste une chaîne vide au lieu.

^\s*$\n(.*)(\n------Original Message------)?

Modifier Je ne l'ai pas voté vers le bas tout le monde et si vous arrivez à downvote, il est généralement utile d'inclure des commentaires.

Était-ce utile?

La solution

Pourquoi ne pas utiliser vous pas DotnetOpenMail ? L'utilisation d'un regex pour ce faire est une mauvaise approche, vous feriez mieux d'utiliser un gestionnaire de courrier électronique dédié à la place ....

Autres conseils

La raison est que vous avez un \n supplémentaire à l'intérieur de la parenthèse. Si le corps est vide, il n'y a pas nouvelle ligne de plus là. Par conséquent, essayez ceci:

^\s*$\r\n(.*)(^------Original Message------$)?

Si vous ne voulez pas que la nouvelle ligne à la fin du corps, vous pouvez toujours utiliser string.Trim() de la part apparié.

Note:. Cela suppose que les utilisations d'entrée de fin de ligne de \r\n (qui est nécessaire dans les en-têtes de courrier électronique conformément à la norme MIME)

Vous devez remplacer (\n------Original Message------) avec (?=(\n------Original Message------)) Lookahead ne pas retourner cette partie, juste pour vous assurer qu'il est là

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top