Wat wil ik oplossen:
Wij hebben een ERP software pakket dat via de mail een bestelling kan doen bij verschillende leveranciers. Nu hebben we 1 leverancier die perse een vast subject moet hebben om opgepakt te worden door hun importrobot voor de bestellingen.
Hoe is het nu opgelost:
ERP stuurt een mail naar een hiervoor aangemaakte mailbox. In deze mailbox staat een rule naar de afdeling inkoop dat ze deze mail door moeten sturen naar het adres van de leverancier en hierin staat aangegeven welk subject er gebruikt moet worden. Dit wordt dan handmatig door de afdeling inkoop gedaan.
Wat ik nu al heb gevonden:
Ik heb het volgende script samen kunnen stellen en dit werkt, maar is nog niet optimaal.
Dit script maakt verbinding met de mailbox, selecteert de eerste mail en past deze aan zoals gewenst, stuurt deze door naar een extern adres en wordt daarna verplaatst naar een map afgehandeld.
Hierdoor wordt de 2e mail de 1e en kan het script opnieuw gestart worden.
Wat zou wel optimaal zijn:
Hij moet alle ongelezen mails waarin het woord 'bestelorder' voorkomt in subject of van een bepaald afzendadres aanpassen en doorsturen. Dit omdat de leverancier een orderbevestiging terug stuurt naar deze mailbox. We willen natuurlijk niet dat deze dan ook weer doorgestuurd wordt naar de leverancier.Het zou ook fijn zijn als er meer bestelorders in de map staan dat deze allemaal aangepast en doorgestuurd worden.
Kort samengevat: Dus hij moet checken of er in de inbox een mail staat van een afzender en/of met het woord bestelorder in het subject. Wanneer er geen mail aan de eerder benoemde voorwaarden voldoet mag het script afgebroken worden. Wanneer er wel mail aan de eerder benoemde voorwaarden voldoet moeten deze automatisch voorzien worden van een nieuwe afzender, ontvanger en subject en dan doorgestuurd worden.
Ik hoop dat ik het een beetje duidelijk heb kunnen omschrijven en dat er mensen zijn die mij ermee kunnen helpen. Ik ben redelijk beginner met python, dus hiervoor graag jullie begrip. Als je antwoord geef wil je dit dan zo uitgebreid mogelijk doen zodat ik het begrijp en er iets van kan leren.
Het is python 2.7.13
Mailserver is groupwise
Wij hebben een ERP software pakket dat via de mail een bestelling kan doen bij verschillende leveranciers. Nu hebben we 1 leverancier die perse een vast subject moet hebben om opgepakt te worden door hun importrobot voor de bestellingen.
Hoe is het nu opgelost:
ERP stuurt een mail naar een hiervoor aangemaakte mailbox. In deze mailbox staat een rule naar de afdeling inkoop dat ze deze mail door moeten sturen naar het adres van de leverancier en hierin staat aangegeven welk subject er gebruikt moet worden. Dit wordt dan handmatig door de afdeling inkoop gedaan.
Wat ik nu al heb gevonden:
Ik heb het volgende script samen kunnen stellen en dit werkt, maar is nog niet optimaal.
Dit script maakt verbinding met de mailbox, selecteert de eerste mail en past deze aan zoals gewenst, stuurt deze door naar een extern adres en wordt daarna verplaatst naar een map afgehandeld.
Hierdoor wordt de 2e mail de 1e en kan het script opnieuw gestart worden.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
| import smtplib, imaplib, email, re #mail lezen, aanpassen en doorsturen imap_host = "SERVERNAME" client = imaplib.IMAP4('SERVERNAM') client.login('USERNAME', 'PWD') client.select('INBOX') #, readonly=True msgid = 1 status, data = client.fetch(msgid, "(RFC822)") email_data = data[0][1] client.close() client.logout() message = email.message_from_string(email_data) message.replace_header("Subject", "test") message.replace_header("From", 'test@test.com') message.replace_header("To", 'EXTERN EMAILADRES') smtp = smtplib.SMTP('SMTP SERVER') smtp.starttls() smtp.login('USERNAME', 'PWD') from_addr = "AFZENDADRES" to_addr = "EXTERN EMAILADRES" smtp.sendmail(from_addr, to_addr, message.as_string()) #Mail verplaatsen naar folder client = imaplib.IMAP4('SERVERNAME') client.login('USERNAME', 'PWD') client.select('INBOX', readonly=False) pattern_uid = re.compile('\d+ \(UID (?P<uid>\d+)\)') def parse_uid(data): match = pattern_uid.match(data) return match.group('uid') resp, items = client.search(None, 'All') email_ids = items[0].split() latest_email_id = email_ids[0] resp, data = client.fetch(latest_email_id, "(UID)") msg_uid = parse_uid(data[0]) result = client.uid('COPY', msg_uid, 'INBOX/Afgehandeld') if result[0] == 'OK': mov, data = client.uid('STORE', msg_uid , '+FLAGS', '(\Deleted)') client.expunge() client.close() client.logout() |
Wat zou wel optimaal zijn:
Hij moet alle ongelezen mails waarin het woord 'bestelorder' voorkomt in subject of van een bepaald afzendadres aanpassen en doorsturen. Dit omdat de leverancier een orderbevestiging terug stuurt naar deze mailbox. We willen natuurlijk niet dat deze dan ook weer doorgestuurd wordt naar de leverancier.Het zou ook fijn zijn als er meer bestelorders in de map staan dat deze allemaal aangepast en doorgestuurd worden.
Kort samengevat: Dus hij moet checken of er in de inbox een mail staat van een afzender en/of met het woord bestelorder in het subject. Wanneer er geen mail aan de eerder benoemde voorwaarden voldoet mag het script afgebroken worden. Wanneer er wel mail aan de eerder benoemde voorwaarden voldoet moeten deze automatisch voorzien worden van een nieuwe afzender, ontvanger en subject en dan doorgestuurd worden.
Ik hoop dat ik het een beetje duidelijk heb kunnen omschrijven en dat er mensen zijn die mij ermee kunnen helpen. Ik ben redelijk beginner met python, dus hiervoor graag jullie begrip. Als je antwoord geef wil je dit dan zo uitgebreid mogelijk doen zodat ik het begrijp en er iets van kan leren.
Het is python 2.7.13
Mailserver is groupwise