Added Signature draft
This commit is contained in:
		
							
								
								
									
										8
									
								
								README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								README.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | |||||||
|  | python main.py \ | ||||||
|  |   -n "Max Mustermann" \ | ||||||
|  |   -P "Entwickler" \ | ||||||
|  |   -t "+49 123 456789" \ | ||||||
|  |   -u "maxuser" \ | ||||||
|  |   -l "maxlinkedin" \ | ||||||
|  |   -a "Musterstraße 1, 12345 Musterstadt" \ | ||||||
|  |   -o signature.html | ||||||
							
								
								
									
										64
									
								
								main.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								main.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,64 @@ | |||||||
|  | import argparse | ||||||
|  | import base64 | ||||||
|  | from jinja2 import Environment, FileSystemLoader | ||||||
|  | import os | ||||||
|  |  | ||||||
|  | def encode_file(path, mime_type): | ||||||
|  |     """Liest eine Datei ein und gibt eine data-uri zurück.""" | ||||||
|  |     with open(path, 'rb') as f: | ||||||
|  |         data = f.read() | ||||||
|  |     return f"data:{mime_type};base64,{base64.b64encode(data).decode('utf-8')}" | ||||||
|  |  | ||||||
|  |  | ||||||
|  | def main(): | ||||||
|  |     parser = argparse.ArgumentParser( | ||||||
|  |         description="Generiere eine HTML-E-Mail-Signatur für das CyMaIS Projekt" | ||||||
|  |     ) | ||||||
|  |     parser.add_argument('-n', '--name', required=True, help="Vollständiger Name") | ||||||
|  |     parser.add_argument('-P', '--position', required=True, help="Position / Titel") | ||||||
|  |     parser.add_argument('-t', '--phone', required=True, help="Telefonnummer") | ||||||
|  |     parser.add_argument('-u', '--username', required=True, help="Allgemeiner Nutzername für E-Mail, WordPress, Mastodon, etc.") | ||||||
|  |     parser.add_argument('-l', '--linkedin', required=True, help="LinkedIn-Nutzername (ohne URL)") | ||||||
|  |     parser.add_argument('-a', '--address', default='', help="Anschrift (optional)") | ||||||
|  |     parser.add_argument('-o', '--output', default='signature.html', help="Zieldatei für die generierte Signatur") | ||||||
|  |     args = parser.parse_args() | ||||||
|  |  | ||||||
|  |     # Basis-Kontext | ||||||
|  |     context = { | ||||||
|  |         'name': args.name, | ||||||
|  |         'position': args.position, | ||||||
|  |         'company': 'CyMaIS Projekt', | ||||||
|  |         'address': args.address, | ||||||
|  |         'phone': args.phone, | ||||||
|  |         'email': f"{args.username}@cymais.cloud", | ||||||
|  |         'website_url': 'https://www.cymais.cloud/', | ||||||
|  |         'socials': { | ||||||
|  |             'LinkedIn': f'https://www.linkedin.com/in/{args.linkedin}', | ||||||
|  |             'WordPress': 'https://www.cymais.cloud/', | ||||||
|  |             'Mastodon': f'https://mastodon.social/@{args.username}', | ||||||
|  |             'PeerTube': f'https://peertube.video/channel/{args.username}', | ||||||
|  |             'PixelFed': f'https://pixelfed.social/@{args.username}', | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     # Pfad zum Template-Verzeichnis | ||||||
|  |     env = Environment(loader=FileSystemLoader(os.path.dirname(__file__))) | ||||||
|  |     template = env.get_template('signature_template.j2') | ||||||
|  |  | ||||||
|  |     # Logo und Icons einbetten | ||||||
|  |     context['logo'] = encode_file(os.path.join(os.path.dirname(__file__), 'logo.png'), 'image/png') | ||||||
|  |     context['icons'] = {} | ||||||
|  |     for name, url in context['socials'].items(): | ||||||
|  |         filename = name.lower() + ('.png' if name == 'LinkedIn' else '.svg') | ||||||
|  |         mime = 'image/png' if name == 'LinkedIn' else 'image/svg+xml' | ||||||
|  |         context['icons'][name] = encode_file(os.path.join(os.path.dirname(__file__), filename), mime) | ||||||
|  |  | ||||||
|  |     # Rendern und speichern | ||||||
|  |     output = template.render(**context) | ||||||
|  |     with open(args.output, 'w', encoding='utf-8') as f: | ||||||
|  |         f.write(output) | ||||||
|  |  | ||||||
|  |     print(f"Signatur erfolgreich generiert: {args.output}") | ||||||
|  |  | ||||||
|  | if __name__ == '__main__': | ||||||
|  |     main() | ||||||
							
								
								
									
										33
									
								
								signature_template.j2
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								signature_template.j2
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,33 @@ | |||||||
|  | <!DOCTYPE html> | ||||||
|  | <html lang="de"> | ||||||
|  | <head><meta charset="UTF-8"><title>E-Mail Signatur</title></head> | ||||||
|  | <body> | ||||||
|  | <table cellpadding="0" cellspacing="0" style="font-family:Arial,sans-serif;color:#333;font-size:14px;line-height:1.5;"> | ||||||
|  |   <tr> | ||||||
|  |     <td style="vertical-align:top;padding-right:10px;"> | ||||||
|  |       <img src="{{ logo }}" alt="CyMaIS Projekt Logo" style="width:60px;height:auto;display:block; vertical-align:bottom;"> | ||||||
|  |     </td> | ||||||
|  |     <td style="vertical-align:top;"> | ||||||
|  |       <div> | ||||||
|  |         <span style="font-size:18px;font-weight:bold;color:#1a0dab;">{{ name }}</span><br> | ||||||
|  |         <span style="font-size:14px;font-style:italic;color:#555;">{{ position }}</span><br> | ||||||
|  |         <span style="font-weight:bold;color:#1a0dab;">{{ company }}</span> | ||||||
|  |       </div> | ||||||
|  |     </td> | ||||||
|  |   </tr> | ||||||
|  |   <tr> | ||||||
|  |     <td colspan="2" style="padding-top:8px;"> | ||||||
|  |       {% if address %}<div style="margin-bottom:4px;">{{ address }}</div>{% endif %} | ||||||
|  |       <div style="margin-bottom:4px;"><strong>Telefon:</strong> {{ phone }}</div> | ||||||
|  |       <div style="margin-bottom:4px;"><strong>E-Mail:</strong> <a href="mailto:{{ email }}" style="color:#1a0dab;text-decoration:none;">{{ email }}</a></div> | ||||||
|  |       <div style="margin-bottom:8px;"><strong>Web:</strong> <a href="{{ website_url }}" style="color:#1a0dab;text-decoration:none;">{{ website_url.replace('https://','') }}</a></div> | ||||||
|  |       <hr style="margin:0 0 8px 0;border:none;border-top:1px solid #ccc;width:100%;"> | ||||||
|  |       <span style="margin-right:8px;font-size:14px;color:#333;">Folge mir auf</span> | ||||||
|  |       {% for network in icons.keys() %} | ||||||
|  |       <img src="{{ icons[network] }}" alt="{{ network }}" style="width:24px;height:auto;display:inline-block;vertical-align:middle;margin-right:8px;"> | ||||||
|  |       {% endfor %} | ||||||
|  |     </td> | ||||||
|  |   </tr> | ||||||
|  | </table> | ||||||
|  | </body> | ||||||
|  | </html> | ||||||
		Reference in New Issue
	
	Block a user
	 Kevin Veen-Birkenbach
					Kevin Veen-Birkenbach