[PYTHON] Rendre possible la lecture de .eml depuis un smartphone à l'aide d'un bot Discord

Aperçu

J'utilise Spark comme application de messagerie sur iOS, mais parfois le courrier transféré n'est pas affiché dans le corps et est joint en tant que fichier .eml. (Cela semble être causé par les paramètres du côté utilisateur de Thunderbird .-> Mozilla Question Box) Ce fichier .eml ne peut pas être ouvert directement sur l'iphone. Vous pouvez le voir en utilisant une application payante ou une page de conversion en ligne, mais c'est un peu gênant. Ceci est résolu avec un bot discord.

La source de ce bot discord est écrite en Python. J'ai utilisé ce contenu pour le processus d'extraction du contenu du fichier .eml. -> Qiita

Fonction objectif

--Lorsque vous envoyez un fichier .eml depuis votre smartphone vers le canal ou le DM où se trouve le robot discord, le fichier texte avec le contenu est envoyé à discord.

Le corps de l'e-mail ayant tendance à être long, je l'ai envoyé à Discord sous forme de fichier texte au lieu du contenu du message.

source

importer etc.

Sauf pour MailParser, le contenu n'est pas si pertinent cette fois.

main.py


from MailParser import MailParser

import discord
from discord.ext import commands
description = ""
bot = commands.Bot(command_prefix="?", description=description)

@bot.event
async def on_ready():
    print("Logged in as")
    print(bot.user.name)
    print(bot.user.id)
    print("------")

Réception de fichiers

Ajoutez-le également à la fin de on_message dans @ bot.event.

main.py


@bot.event
async def on_message(message):
    #S'il y a un fichier joint
    if (len(message.attachments) > 0):
        for att in message.attachments:
            #L'extension est.Déterminer si eml
            file_extension = att.filename.split(".")[-1]
            if file_extension == ".eml":
                await read_eml(message.channel, await att.read())

Envoyer le contenu de eml

Pour éviter les caractères déformés, il est encodé avec Shift-JIS.

main.py


async def read_eml(discord_channel, file_content: bytes):
    """Lire le fichier eml,Afficher le contenu"""
    #eml lire
    eml_result = MailParser(file_content).get_attr_data2()
    # 
    file_path = f"{os.path.dirname(__file__)}/../out/eml.txt"
    # shift-Si ce n'est pas le cas, les caractères seront déformés->Chrome-kun
    with open(file=file_path, mode="w", encoding="shift-jis", errors="replace") as f:
        f.write(eml_result["content"])
    await discord_channel.send(file=discord.File(file_path))
    for att in eml_result["attach"]:
        with open(f"{os.path.dirname(__file__)}/../out/{att['name']}", "wb") as f:
            f.write(att["data"])
        await discord_channel.send(file=discord.File(att["name"]))
```

### Lire le contenu de eml (changer un peu MailParser)

 Ajoutez un sujet au contenu et une méthode qui renvoie également le fichier joint.


#### **`main.py`**
```python

def get_attr_data2(self):
    """
Obtenir des données de messagerie
    """
    mail_content = f"""\
SUBJECT: {self.subject}

----

FROM: {self.from_address}
TO: {self.to_address}
CC: {self.cc_address}

----

{self.body}

----

ATTACH_FILE_NAME:
{",".join([ s["name"] for s in self.attach_file_list])}
"""
    return {"content":mail_content, "attach":self.attach_file_list}

setattr(MailParser, get_attr_data2.__name__, get_attr_data2)
```

## comment utiliser

 1. Envoyez le fichier `.eml` du partage à Discord.
 2. Le bot renvoie le fichier texte.
 3. Ouvrez-le dans le navigateur et vous verrez le contenu.

 ![EML_view_ss.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306461/abad2fc7-a035-62e2-9fb1-caaf279a7f6d.png)


Recommended Posts

Rendre possible la lecture de .eml depuis un smartphone à l'aide d'un bot Discord
J'ai essayé de créer un BOT de traduction qui fonctionne avec Discord en utilisant googletrans
Connectez votre Raspberry Pi à votre smartphone en utilisant Blynk
Développer la source devicetree pour faciliter la lecture
Une histoire qui a permis de créer automatiquement une liste de lecture Anison à partir de vos fichiers musicaux
Essayez de le faire avec GUI, PyQt en Python
Créez le nuage de mots de Qiita à partir de l'historique de votre navigateur
Faisons un robot Discord.
Lisez votre numéro d'inscription scolaire à partir de votre carte d'étudiant avec Raspberry Pi