winlin
Goto Top

Rest-API Aufruf bei Mailempfang

Hallo Zusammen

Ich würde gerne anhand einer eingehenden email ein Track&Release Issue erstellen. Der API Call zum erstellen eines issues würde so aussehen:
https://developer.atlassian.com/server/jira/platform/jira-rest-api-examp ...

Die Frage ist nun wie bekomme ich es hin das wenn im Outlook eine Mail eines bestimmten Absenders eingeht eben ein solcher api request gestartet wird?

In der Email sollen dann auch bestimmte Infos wie User mit in das Ticket ins Description Field mit aufgenommen werden.

Einer ne Idee wie man das lösen könnte??

Content-ID: 1262939252

Url: https://administrator.de/contentid/1262939252

Ausgedruckt am: 22.11.2024 um 10:11 Uhr

BirdyB
BirdyB 15.09.2021 aktualisiert um 16:33:37 Uhr
Goto Top
Moin,

habt Ihr Microsoft365? Dann würde ich es mit PowerAutomate machen. Sonst muss Outlook ja immer laufen...
Wenn es Outlook sein muss, dann kann man da mit VBA bestimmt irgendwas zusammenklöppeln...

VG

Edit: Oder irgendwas mit einer kleinen fetchmail-Instanz oder so... Das ginge bestimmt auch...
winlin
winlin 15.09.2021 um 16:35:58 Uhr
Goto Top
Hmmmm ok also bräuchte ich so nen mail handler…vba wäre dann erledigt da keiner Ahnung davon hatface-smile
148656
148656 15.09.2021 um 16:50:48 Uhr
Goto Top
Moin,

was ist ein "Track&Release Issue"?
Kann man das mit einem "Meilenstein" beim Agilen Projektmanagement vergleichen?

Gruß
C.C.
wiesi200
wiesi200 16.09.2021 um 06:04:13 Uhr
Goto Top
Hallo
Bei nem Exchange könnte man noch EWS ran. Und das per Powershell oder sonst was lösen.
colinardo
Lösung colinardo 16.09.2021 aktualisiert um 10:45:36 Uhr
Goto Top
Servus.
Für solche Sachen ala Mail checken und darauf reagieren hatte ich hier schon x unterschiedlichste Varianten gepostet, ob für Windows mit der Powershell (Mailkit oder auch EWS), VBA in Outlook selbst oder unter Linux mit Python etc.
In meinen Beiträgen findest du dazu genügend Input anhand von praktischen Codebeispielen:

Da kannst du dir das raussuchen was dir am ehesten liegt.

Ein Rest Request in den Skripten zu ergänzen ist dann ja ein Kinderspiel und in der Powershell mit Invoke-Restmethod bzw. Invoke-Webrequest oder Python mit Import des "requests" Moduls schnell erledigt.

Hier mal "Random" ein einfaches Beispiel mit Python (Achtung mit den Einrückungen, das kann beim Kopieren hier aus dem Forum evt. zu Fehlern führen, dann müssen die Einrückungen korrigiert werden, da Python diesbezüglich ja empfindlich ist)
#!/usr/bin/env python3
# ==================================================================================
# CONNECT TO IMAP MAILBOX AND PROCESS MESSAGES FROM SPECIFIC USER
# ==================================================================================

#======= IMPORTS ========
import imaplib
import email
import os
import sys
import re
import requests

# ======= VARS ==========
# MAILSERVER
SERVER = 'imap.domain.tld'  
# USERNAME
USERNAME = 'USERNAME'  
# PASSWORD
PASSWORD = 'PASSWORD'  
# from email
MAILFROM = 'user@domain.tld'  
# ======= CODE ===========

try:
	# connect to server
	conn = imaplib.IMAP4_SSL(SERVER)
	# login into mailbox
	ret,details = conn.login(USERNAME,PASSWORD)
	if ret != 'OK':  
		raise Exception('Not able to sign in.')  
	# select inbox
	ret, data = conn.select('INBOX')  
	if ret != 'OK':  
		raise Exception('ERROR, could not select INBOX folder (name correct?).')  
	# filter out mails
	(ret, messages) = conn.search(None,'UNSEEN')  
	if ret != 'OK':  
			raise Exception('Could not fetch mails.')  
	# get message ids in list
	message_ids = messages.split()

	# if there are messages
	if len(message_ids) > 0:
		# itterate over all messages
		for msg in message_ids:
			# get message
			ret,parts = conn.fetch(msg,'(RFC822)')  
			if ret != 'OK':  
				raise Exception('ERROR, fetching mail with id ' + str(msg))  
			# body part
			body = parts[1]
			# create mail object from raw mail
			mail = email.message_from_bytes(body)
			# extract some usefull mail headers
			mail_subject = mail.get('Subject')  
			# get sender email address
			mail_from = email.utils.parseaddr(mail.get('From'))[1]  
			# if from matches specified address ...
			if mail_from.lower() == MAILFROM.lower():
				print("INFO -> Processing new message from '" + mail_from + "' with subject: '" + mail_subject + "'")  
				print("Making post request ... ")  
				# payload for post request
				payload = {"fields":{"project":{"key":"TEST"},"summary":"REST ye merry gentlemen.","description":"Creating of an issue using project keys and issue type names using the REST API","issuetype":{"name":"Bug"}}}  
				# make post request with json data and basic authentication
				result = requests.post("http://localhost:8080/rest/api/2/issue/",json=payload,auth=('user', 'pass'))  
				# show result returned
				print("Result: " + result.text)  
				# mark mail as 'seen' 
				conn.store(msg,'+FLAGS','\\SEEN')  
	else:
		print('INFO -> No unseen messages in INBOX.')  
	# close connection
	conn.close()
	conn.logout()
except Exception as ex:
	exc_type, exc_obj, exc_tb = sys.exc_info()
	fname = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1]
	print(exc_type, fname, exc_tb.tb_lineno)

Grüße Uwe