Envoi automatisé d'un résumé d'e-mails quotidien avec Gmail et GPT
Ceci est unPersonal Productivity, AI Summarizationworkflow d'automatisation du domainecontenant 6 nœuds.Utilise principalement des nœuds comme Cron, Gmail, OpenAi, Function. Envoi automatique d'un résumé quotidien des e-mails via Gmail et GPT, chaque après-midi
- •Compte Google et informations d'identification Gmail API
- •Clé API OpenAI
Catégorie
{
"nodes": [
{
"name": "Déclencheur de l'après-midi (16h)",
"type": "n8n-nodes-base.cron",
"notes": {
"text": "### 1. Trigger in the Afternoon\n\nThis `Cron` node is configured to run automatically every **day at 4:00 PM (16:00)** based on your n8n server's local time zone.\n\n**To change the schedule:** Adjust the 'Hour' and 'Minute' fields to your preferred time.",
"position": "right"
},
"position": [
240,
300
],
"parameters": {
"mode": "everyDay",
"value": {
"hour": [
16
],
"minute": [
0
]
},
"options": {}
},
"typeVersion": 1,
"id": "D-clencheur-de-l-apr-s-midi-16h--0"
},
{
"name": "Calculer les dates du jour",
"type": "n8n-nodes-base.function",
"notes": {
"text": "### 2. Calculate Today's Dates\n\nThis `Function` node calculates the start of the current day (midnight) and the current time, which will be used to fetch emails received *today* up to the moment the workflow runs.\n\n**Output:** It generates two fields:\n* `minDate`: The ISO string for today's midnight (00:00:00).\n* `nowDate`: The ISO string for the current time (when the workflow runs).\n\n**No configuration needed here**; it automatically determines the dates.",
"position": "right"
},
"position": [
480,
300
],
"parameters": {
"options": {},
"function": "const DateTime = this.getNodeParameter('DateTime');\n\nconst now = DateTime.now();\n\n// Calculate the start of the current day (e.g., today at 00:00:00)\nconst startOfDay = now.startOf('day');\n\nreturn [{ json: { \n minDate: startOfDay.toISO(),\n nowDate: now.toISO()\n} }];"
},
"typeVersion": 1,
"id": "Calculer-les-dates-du-jour-1"
},
{
"name": "Obtenir les e-mails du jour (Gmail)",
"type": "n8n-nodes-base.gmail",
"notes": {
"text": "### 3. Get Today's Emails\n\nThis `Gmail` node fetches emails received in your inbox since the beginning of the current day until the workflow is triggered.\n\n**Setup:**\n1. **Gmail Credential:** Click on 'Credentials' and select 'New Credential'. Choose 'Gmail API'. Follow the n8n instructions to connect your Gmail account.\n2. **Query:** The 'Query' field uses Gmail's search operators (`after:` and `before:`) combined with the dates calculated in the previous node to ensure it only fetches today's emails.\n3. **Max Results:** Adjust `Max Results` if you typically receive many more than 20 emails in a day that you'd want summarized. (Be mindful of AI token limits for very large inputs).\n\n**Important:** Ensure your Gmail API has the necessary read scope (`https://www.googleapis.com/auth/gmail.readonly` or full access).",
"position": "right"
},
"position": [
720,
300
],
"parameters": {
"query": "after:{{ $json.minDate }} before:{{ $json.nowDate }}",
"options": {
"maxResults": 20
},
"emailType": "inbox",
"operation": "getAll"
},
"credentials": {
"gmailApi": {
"id": "YOUR_GMAIL_CREDENTIAL_ID",
"resolve": false
}
},
"typeVersion": 2,
"id": "Obtenir-les-e-mails-du-jour-Gmail--2"
},
{
"name": "Combiner le contenu des e-mails",
"type": "n8n-nodes-base.function",
"notes": {
"text": "### 4. Combine Email Content\n\nThis `Function` node takes all the fetched emails and combines their sender, subject, and snippet (a short preview) into a single text string.\n\n**Purpose:** This consolidated text string will then be fed into the AI summarization node.\n\n**No configuration needed here**; it's pre-programmed to format your email data.",
"position": "right"
},
"position": [
960,
300
],
"parameters": {
"options": {},
"function": "let emailContent = \"\";\n\nif (items.length === 0) {\n emailContent = \"No new emails received today.\";\n} else {\n emailContent = \"Today's Emails Summary:\\n\\n\";\n for (const item of items) {\n const email = item.json;\n const sender = email.payload.headers.find(h => h.name === 'From').value || 'Unknown Sender';\n const subject = email.payload.headers.find(h => h.name === 'Subject').value || 'No Subject';\n const snippet = email.snippet || 'No snippet available.';\n\n emailContent += `From: ${sender}\\nSubject: ${subject}\\nSnippet: ${snippet}\\n---\\n`;\n }\n}\n\nreturn [{ json: { combinedEmails: emailContent } }];"
},
"typeVersion": 1,
"id": "Combiner-le-contenu-des-e-mails-3"
},
{
"name": "IA : Résumer les e-mails",
"type": "n8n-nodes-base.openAi",
"notes": {
"text": "### 5. AI: Summarize Emails\n\nThis `OpenAI` node takes the combined email content and generates a high-level summary using artificial intelligence.\n\n**Setup:**\n1. **OpenAI Credential:** Select your existing OpenAI API Key credential.\n2. **Model:** You can choose `gpt-3.5-turbo` for cost-effectiveness or `gpt-4o` for potentially better and more nuanced summaries.\n3. **Prompt:** The system prompt instructs the AI on how to summarize the emails, focusing on key topics and action items.\n\n**Output:** The AI-generated summary will be in `{{ $node[\"AI: Summarize Emails\"].json.choices[0].message.content }}`.",
"position": "right"
},
"position": [
1200,
300
],
"parameters": {
"model": "gpt-3.5-turbo",
"options": {},
"messages": [
{
"role": "system",
"content": "You are an AI assistant specialized in summarizing daily email communications. Your task is to read the provided email subjects and snippets, identify the most important topics and action items, and create a concise, readable summary. Group related emails if possible. If there are no emails, state that clearly."
},
{
"role": "user",
"content": "Summarize the following daily email content:\n\n{{ $json.combinedEmails }}"
}
]
},
"credentials": {
"openAiApi": {
"id": "YOUR_OPENAI_CREDENTIAL_ID",
"resolve": false
}
},
"typeVersion": 1,
"id": "IA-R-sumer-les-e-mails-4"
},
{
"name": "Envoyer l'e-mail de résumé",
"type": "n8n-nodes-base.gmail",
"notes": {
"text": "### 6. Send Summary Email\n\nThis `Gmail` node sends the final AI-generated summary to your specified email address.\n\n**Setup:**\n1. **Gmail Credential:** Select your existing Gmail API credential.\n2. **From Email:** Enter your Gmail address (this must be the same account you authenticated).\n3. **To Email:** **IMPORTANT: Change `YOUR_RECIPIENT_EMAIL@example.com` to your actual email address!**\n4. **Subject:** Includes the current date for easy reference.\n5. **Text:** The email body contains the summary generated by the AI.\n\nAfter setting up, you can test by clicking 'Execute Workflow' (from the 'Afternoon Trigger' node) to receive an immediate summary of today's emails.",
"position": "right"
},
"position": [
1440,
300
],
"parameters": {
"text": "Hello!\n\nHere's your daily email summary from n8n for today:\n\n{{ $node[\"AI: Summarize Emails\"].json.choices[0].message.content }}\n\n---\n\n*This is an automated summary generated by n8n. Please log into your inbox for full details.*",
"options": {},
"subject": "Daily Email Summary: {{ DateTime.now().toFormat('cccc, LLLL dd, yyyy') }}",
"toEmail": "YOUR_RECIPIENT_EMAIL@example.com",
"fromEmail": "YOUR_GMAIL_EMAIL@gmail.com"
},
"credentials": {
"gmailApi": {
"id": "YOUR_GMAIL_CREDENTIAL_ID",
"resolve": false
}
},
"typeVersion": 2,
"id": "Envoyer-l-e-mail-de-r-sum--5"
}
],
"pinData": {},
"version": 1,
"connections": {
"IA-R-sumer-les-e-mails-4": {
"main": [
[
{
"node": "Envoyer-l-e-mail-de-r-sum--5",
"type": "main"
}
]
]
},
"Combiner-le-contenu-des-e-mails-3": {
"main": [
[
{
"node": "IA-R-sumer-les-e-mails-4",
"type": "main"
}
]
]
},
"Calculer-les-dates-du-jour-1": {
"main": [
[
{
"node": "Obtenir-les-e-mails-du-jour-Gmail--2",
"type": "main"
}
]
]
},
"D-clencheur-de-l-apr-s-midi-16h--0": {
"main": [
[
{
"node": "Calculer-les-dates-du-jour-1",
"type": "main"
}
]
]
},
"Obtenir-les-e-mails-du-jour-Gmail--2": {
"main": [
[
{
"node": "Combiner-le-contenu-des-e-mails-3",
"type": "main"
}
]
]
}
}
}Comment utiliser ce workflow ?
Copiez le code de configuration JSON ci-dessus, créez un nouveau workflow dans votre instance n8n et sélectionnez "Importer depuis le JSON", collez la configuration et modifiez les paramètres d'authentification selon vos besoins.
Dans quelles scénarios ce workflow est-il adapté ?
Intermédiaire - Productivité personnelle, Résumé IA
Est-ce payant ?
Ce workflow est entièrement gratuit et peut être utilisé directement. Veuillez noter que les services tiers utilisés dans le workflow (comme l'API OpenAI) peuvent nécessiter un paiement de votre part.
Workflows recommandés
Piotr Sobolewski
@piotrsobolewskiAI PhD with 7 years experience as a game dev CEO, currently teaching, helping others and building something new.
Partager ce workflow