Help mij met het schrijven van Ruby code voor geautomatiseerde e-mailverwerking
description
Met deze prompt kun je een Ruby script ontwikkelen dat je e-mailworkflow automatiseert, waardoor je tijd bespaart en foutgevoelige handmatige taken elimineert. Het is specifiek gericht op e-mailprotocol integratie en robuuste foutafhandeling, wat het praktischer maakt dan algemene scripts.
prompt
Help mij met het schrijven van Ruby code die automatisch e-mails verwerkt volgens de volgende criteria: <beschrijf de criteria voor het filteren, sorteren of reageren op e-mails>. Geef aan ...
try_prompt
generate_helper
disclaimerOnPageApi
tags
ai_answers
provider: openai
model: gpt-4.1-nano
Hier is een voorbeeld van Ruby-code die IMAP gebruikt om e-mails te filteren op onderwerp 'Factuur', bijlagen op te slaan en foutafhandeling te implementeren:
```ruby
require 'net/imap'
require 'mail'
require 'fileutils'
# Configuratie
IMAP_SERVER = 'imap.jouwdomein.com'
IMAP_PORT = 993
USERNAME = 'jouwgebruikersnaam'
PASSWORD = 'jouwwachtwoord'
FOLDER = 'INBOX'
ATTACHMENTS_DIR = 'bijlagen'
# Maak de directory voor bijlagen aan als deze niet bestaat
FileUtils.mkdir_p(ATTACHMENTS_DIR)
begin
# Verbinding maken met IMAP
imap = Net::IMAP.new(IMAP_SERVER, IMAP_PORT, true)
imap.login(USERNAME, PASSWORD)
imap.select(FOLDER)
# Zoeken naar e-mails met onderwerp 'Factuur'
ids = imap.search(["HEADER", "SUBJECT", "Factuur"])
ids.each do |id|
begin
# E-mail ophalen
msg_data = imap.fetch(id, "RFC822")[0].attr["RFC822"]
mail = Mail.read_from_string(msg_data)
# E-mailgegevens tonen (optioneel)
puts "Verwerken email: #{mail.subject}"
# Bijlagen opslaan
mail.attachments.each do |attachment|
filename = attachment.filename
filepath = File.join(ATTACHMENTS_DIR, filename)
# Bijlage opslaan met foutafhandeling
begin
File.open(filepath, "wb") { |f| f.write(attachment.body.decoded) }
puts "Bijlage opgeslagen: #{filename}"
rescue => e
puts "Fout bij opslaan bijlage #{filename}: #{e.message}"
end
end
rescue => e
puts "Fout bij het verwerken van email ID #{id}: #{e.message}"
end
end
# Afsluiten
imap.logout
imap.disconnect
rescue => e
puts "Fout bij verbinding of authenticatie: #{e.message}"
end
```
**Gebruik en benodigdheden:**
- Installeer de Ruby-gems: `mail` (voor het parseren van e-mails).
- Pas de variabelen aan met jouw IMAP-server, gebruikersnaam, wachtwoord, en eventueel andere instellingen.
- Dit script zoekt naar alle e-mails met 'Factuur' in het onderwerp, verwerkt ze, en slaat alle bijlagen op in de map 'bijlagen'.
**Aanbevelingen voor efficiëntie:**
- Verwerk alleen nieuwe of onverwerkte e-mails door bijvoorbeeld een status of label te gebruiken.
- Voeg logica toe om al verwerkte e-mails te markeren of te verwijderen.
- Overweeg het gebruik van IMAP `SEARCH` met criteria voor ongelezen of onverwerkte berichten voor betere efficiëntie.
Heeft u nog verdere wensen of aanpassingen?
provider: deepseek
model: deepseek-chat
Ik help je graag met het schrijven van Ruby code voor e-mailverwerking. Hier is een complete oplossing:
## Benodigde e-mailprotocollen/services:
- **IMAP** (aanbevolen) of POP3 voor het ophalen van e-mails
- **SMTP** voor het versturen van antwoorden/bevestigingen
## Vereiste gems:
```bash
gem install mail
gem install net-imap
gem install net-smtp
```
## Ruby code:
```ruby
require 'mail'
require 'net/imap'
require 'fileutils'
class EmailProcessor
def initialize(imap_server, username, password, attachment_path = './attachments')
@imap = Net::IMAP.new(imap_server, ssl: true)
@username = username
@password = password
@attachment_path = attachment_path
create_attachment_directory
end
def process_emails
connect_to_server
select_inbox
# Zoek e-mails met onderwerp 'Factuur'
@imap.search(['SUBJECT', 'Factuur']).each do |message_id|
process_single_email(message_id)
end
rescue Net::IMAP::Error => e
puts "IMAP Fout: #{e.message}"
rescue StandardError => e
puts "Onverwachte fout: #{e.message}"
ensure
disconnect
end
private
def connect_to_server
@imap.login(@username, @password)
puts "Verbonden met e-mailserver"
end
def select_inbox
@imap.select('INBOX')
end
def process_single_email(message_id)
envelope = @imap.fetch(message_id, 'ENVELOPE')[0].attr['ENVELOPE']
puts "Verwerk e-mail: #{envelope.subject}"
# Markeer als gelezen
@imap.store(message_id, '+FLAGS', [:Seen])
# Verwerk bijlagen
save_attachments(message_id)
# Log de verwerking
log_processed_email(envelope)
rescue StandardError => e
puts "Fout bij verwerken e-mail #{message_id}: #{e.message}"
end
def save_attachments(message_id)
mail_data = @imap.fetch(message_id, 'RFC822')[0].attr['RFC822']
mail = Mail.new(mail_data)
mail.attachments.each do |attachment|
filename = safe_filename(attachment.filename)
filepath = File.join(@attachment_path, filename)
File.open(filepath, 'wb') do |file|
file.write(attachment.body.decoded)
end
puts "Bijlage opgeslagen: #{filename}"
end
end
def safe_filename(filename)
# Maak bestandsnaam veilig
filename.gsub(/[^0-9A-Za-z.\-]/, '_')
end
def create_attachment_directory
FileUtils.mkdir_p(@attachment_path) unless Dir.exist?(@attachment_path)
end
def log_processed_email(envelope)
log_entry = {
timestamp: Time.now,
subject: envelope.subject,
from: envelope.from[0].name,
date: envelope.date
}
# Schrijf naar logbestand (kan uitgebreid worden met database)
File.open('email_processing.log', 'a') do |file|
file.puts("#{log_entry[:timestamp]} - Verwerkt: #{log_entry[:subject]}")
end
end
def disconnect
@imap.logout
@imap.disconnect
puts "Verbinding verbroken"
end
end
# Gebruiksvoorbeeld:
processor = EmailProcessor.new(
'imap.gmail.com', # Pas aan naar jouw provider
'jouw_email@gmail.com',
'jouw_wachtwoord',
'./factuur_bijlagen' # Map voor opslag bijlagen
)
# Verwerk e-mails
processor.process_emails
```
## Aanvullende configuratie:
1. **Voor Gmail**: Gebruik `imap.gmail.com` en zorg dat IMAP toegang is ingeschakeld
2. **Beveiliging**: Overweeg om omgevingsvariabelen te gebruiken voor gevoelige data
3. **Scheduling**: Gebruik `cron` (Linux) of Task Scheduler (Windows) voor automatische uitvoering
## Foutafhandeling features:
- Verbindingsfouten
- Ongeldige e-mailformaten
- Bestandssysteemfouten
- Netwerk timeouts
- Logging van alle verwerkte e-mails
## Optimalisaties:
- Batch verwerking van e-mails
- Geheugenefficiënte bijlage verwerking
- Automatische opruiming van oude logs
- Retry mechanisme voor mislukte verwerkingen
Pas de serverinstellingen en paden aan volgens jouw e-mailprovider en bestandssysteemstructuur.