feat: Add STARTTLS authentification method for IMAP protocol (backport #17683)version-14
@@ -29,6 +29,7 @@ | |||||
"default_incoming", | "default_incoming", | ||||
"use_imap", | "use_imap", | ||||
"use_ssl", | "use_ssl", | ||||
"use_starttls", | |||||
"email_server", | "email_server", | ||||
"incoming_port", | "incoming_port", | ||||
"column_break_18", | "column_break_18", | ||||
@@ -601,12 +602,20 @@ | |||||
"fieldtype": "Select", | "fieldtype": "Select", | ||||
"label": "Method", | "label": "Method", | ||||
"options": "Basic\nOAuth" | "options": "Basic\nOAuth" | ||||
}, | |||||
{ | |||||
"default": "0", | |||||
"depends_on": "eval:!doc.domain && doc.enable_incoming && doc.use_imap && !doc.use_ssl", | |||||
"fetch_from": "domain.use_starttls", | |||||
"fieldname": "use_starttls", | |||||
"fieldtype": "Check", | |||||
"label": "Use STARTTLS" | |||||
} | } | ||||
], | ], | ||||
"icon": "fa fa-inbox", | "icon": "fa fa-inbox", | ||||
"index_web_pages_for_search": 1, | "index_web_pages_for_search": 1, | ||||
"links": [], | "links": [], | ||||
"modified": "2022-08-10 13:05:45.445572", | |||||
"modified": "2022-08-16 13:05:45.445572", | |||||
"modified_by": "Administrator", | "modified_by": "Administrator", | ||||
"module": "Email", | "module": "Email", | ||||
"name": "Email Account", | "name": "Email Account", | ||||
@@ -82,6 +82,7 @@ class EmailAccount(Document): | |||||
return | return | ||||
use_oauth = self.auth_method == "OAuth" | use_oauth = self.auth_method == "OAuth" | ||||
self.use_starttls = cint(self.use_imap and self.use_starttls and not self.use_ssl) | |||||
if getattr(self, "service", "") != "GMail" and use_oauth: | if getattr(self, "service", "") != "GMail" and use_oauth: | ||||
self.auth_method = "Basic" | self.auth_method = "Basic" | ||||
@@ -187,6 +188,7 @@ class EmailAccount(Document): | |||||
"use_imap", | "use_imap", | ||||
"email_server", | "email_server", | ||||
"use_ssl", | "use_ssl", | ||||
"use_starttls", | |||||
"smtp_server", | "smtp_server", | ||||
"use_tls", | "use_tls", | ||||
"smtp_port", | "smtp_port", | ||||
@@ -209,6 +211,7 @@ class EmailAccount(Document): | |||||
"email_account": self.name, | "email_account": self.name, | ||||
"host": self.email_server, | "host": self.email_server, | ||||
"use_ssl": self.use_ssl, | "use_ssl": self.use_ssl, | ||||
"use_starttls": self.use_starttls, | |||||
"username": getattr(self, "login_id", None) or self.email_id, | "username": getattr(self, "login_id", None) or self.email_id, | ||||
"service": getattr(self, "service", ""), | "service": getattr(self, "service", ""), | ||||
"use_imap": self.use_imap, | "use_imap": self.use_imap, | ||||
@@ -12,6 +12,7 @@ | |||||
"email_server", | "email_server", | ||||
"use_imap", | "use_imap", | ||||
"use_ssl", | "use_ssl", | ||||
"use_starttls", | |||||
"column_break_9", | "column_break_9", | ||||
"incoming_port", | "incoming_port", | ||||
"attachment_limit", | "attachment_limit", | ||||
@@ -60,6 +61,13 @@ | |||||
"fieldtype": "Check", | "fieldtype": "Check", | ||||
"label": "Use SSL" | "label": "Use SSL" | ||||
}, | }, | ||||
{ | |||||
"default": "0", | |||||
"depends_on": "eval:doc.use_imap && !doc.use_ssl", | |||||
"fieldname": "use_starttls", | |||||
"fieldtype": "Check", | |||||
"label": "Use STARTTLS" | |||||
}, | |||||
{ | { | ||||
"description": "Ignore attachments over this size", | "description": "Ignore attachments over this size", | ||||
"fieldname": "attachment_limit", | "fieldname": "attachment_limit", | ||||
@@ -125,7 +133,7 @@ | |||||
"link_fieldname": "domain" | "link_fieldname": "domain" | ||||
} | } | ||||
], | ], | ||||
"modified": "2022-08-10 21:20:50.692698", | |||||
"modified": "2022-08-19 12:55:06.434541", | |||||
"modified_by": "Administrator", | "modified_by": "Administrator", | ||||
"module": "Email", | "module": "Email", | ||||
"name": "Email Domain", | "name": "Email Domain", | ||||
@@ -56,6 +56,7 @@ class EmailDomain(Document): | |||||
"email_server", | "email_server", | ||||
"use_imap", | "use_imap", | ||||
"use_ssl", | "use_ssl", | ||||
"use_starttls", | |||||
"use_tls", | "use_tls", | ||||
"attachment_limit", | "attachment_limit", | ||||
"smtp_server", | "smtp_server", | ||||
@@ -76,10 +77,12 @@ class EmailDomain(Document): | |||||
def validate_incoming_server_conn(self): | def validate_incoming_server_conn(self): | ||||
self.incoming_port = get_port(self) | self.incoming_port = get_port(self) | ||||
conn_method = Timed_POP3_SSL if self.use_ssl else Timed_POP3 | |||||
if self.use_imap: | if self.use_imap: | ||||
conn_method = Timed_IMAP4_SSL if self.use_ssl else Timed_IMAP4 | conn_method = Timed_IMAP4_SSL if self.use_ssl else Timed_IMAP4 | ||||
else: | |||||
conn_method = Timed_POP3_SSL if self.use_ssl else Timed_POP3 | |||||
self.use_starttls = cint(self.use_imap and self.use_starttls and not self.use_ssl) | |||||
incoming_conn = conn_method(self.email_server, port=self.incoming_port) | incoming_conn = conn_method(self.email_server, port=self.incoming_port) | ||||
incoming_conn.logout() if self.use_imap else incoming_conn.quit() | incoming_conn.logout() if self.use_imap else incoming_conn.quit() | ||||
@@ -33,6 +33,7 @@ class TestDomain(unittest.TestCase): | |||||
# Also make sure that the other attributes match | # Also make sure that the other attributes match | ||||
self.assertEqual(mail_account.use_imap, mail_domain.use_imap) | self.assertEqual(mail_account.use_imap, mail_domain.use_imap) | ||||
self.assertEqual(mail_account.use_ssl, mail_domain.use_ssl) | self.assertEqual(mail_account.use_ssl, mail_domain.use_ssl) | ||||
self.assertEqual(mail_account.use_starttls, mail_domain.use_starttls) | |||||
self.assertEqual(mail_account.use_tls, mail_domain.use_tls) | self.assertEqual(mail_account.use_tls, mail_domain.use_tls) | ||||
self.assertEqual(mail_account.attachment_limit, mail_domain.attachment_limit) | self.assertEqual(mail_account.attachment_limit, mail_domain.attachment_limit) | ||||
self.assertEqual(mail_account.smtp_server, mail_domain.smtp_server) | self.assertEqual(mail_account.smtp_server, mail_domain.smtp_server) | ||||
@@ -100,6 +100,9 @@ class EmailServer: | |||||
self.settings.host, self.settings.incoming_port, timeout=frappe.conf.get("pop_timeout") | self.settings.host, self.settings.incoming_port, timeout=frappe.conf.get("pop_timeout") | ||||
) | ) | ||||
if cint(self.settings.use_starttls): | |||||
self.imap.starttls() | |||||
if self.settings.use_oauth: | if self.settings.use_oauth: | ||||
Oauth( | Oauth( | ||||
self.imap, | self.imap, | ||||
@@ -327,7 +327,7 @@ Active Domains,Domaines Actifs, | |||||
Active Sessions,Sessions Actives, | Active Sessions,Sessions Actives, | ||||
Activity Log,Journal d'Activité, | Activity Log,Journal d'Activité, | ||||
Activity log of all users.,Journal d'activité de tous les utilisateurs., | Activity log of all users.,Journal d'activité de tous les utilisateurs., | ||||
Add / Manage Email Domains.,Ajouter / Gérer les Noms de Domaines des Emails, | |||||
Add / Manage Email Domains.,Ajouter / Gérer les serveurs de courriels, | |||||
Add / Update,Ajouter / mettre à jour, | Add / Update,Ajouter / mettre à jour, | ||||
Add A New Rule,Ajouter une Nouvelle Règle, | Add A New Rule,Ajouter une Nouvelle Règle, | ||||
Add Another Comment,Ajouter un Autre Commentaire, | Add Another Comment,Ajouter un Autre Commentaire, | ||||
@@ -959,8 +959,8 @@ Eg. smsgateway.com/api/send_sms.cgi,Eg. smsgateway.com / api / send_sms.cgi, | |||||
Email Account Name,Nom du Compte Email, | Email Account Name,Nom du Compte Email, | ||||
Email Account added multiple times,Compte Email ajouté plusieurs fois, | Email Account added multiple times,Compte Email ajouté plusieurs fois, | ||||
Email Addresses,Adresse Email, | Email Addresses,Adresse Email, | ||||
Email Domain,Nom de Domaine Email, | |||||
"Email Domain not configured for this account, Create one?","Nom de Domain de l'Email non configuré pour ce compte, En créer un ?", | |||||
Email Domain,Serveur de courriels, | |||||
"Email Domain not configured for this account, Create one?","Serveur de courriels non configuré pour ce compte, En créer un ?", | |||||
Email Flag Queue,Liste d'Attente des d'Emails Marqués, | Email Flag Queue,Liste d'Attente des d'Emails Marqués, | ||||
Email Footer Address,Pied de Page Email, | Email Footer Address,Pied de Page Email, | ||||
Email Group,Groupe Email, | Email Group,Groupe Email, | ||||
@@ -3619,7 +3619,7 @@ Upload {0} files,Télécharger des fichiers {0}, | |||||
Uploaded To Google Drive,Téléchargé sur Google Drive, | Uploaded To Google Drive,Téléchargé sur Google Drive, | ||||
Uploaded successfully,Envoyé avec succès, | Uploaded successfully,Envoyé avec succès, | ||||
Uploading {0} of {1},Téléchargement de {0} sur {1}, | Uploading {0} of {1},Téléchargement de {0} sur {1}, | ||||
Use SSL for Outgoing,Utiliser SSL pour les sorties, | |||||
Use SSL,Utiliser SSL | |||||
Use Same Name,Utiliser le même nom, | Use Same Name,Utiliser le même nom, | ||||
Used For Google Maps Integration.,Utilisé pour l'intégration de Google Maps., | Used For Google Maps Integration.,Utilisé pour l'intégration de Google Maps., | ||||
User ID Property,Propriété ID utilisateur, | User ID Property,Propriété ID utilisateur, | ||||
@@ -4726,3 +4726,18 @@ Always use this email address as sender address,Toujours utiliser cet email comm | |||||
Always use this name as sender name,Toujours utiliser ce nom comme expediteur | Always use this name as sender name,Toujours utiliser ce nom comme expediteur | ||||
Login to {0},Se connecter à {0} | Login to {0},Se connecter à {0} | ||||
Add / Remove Fields,Ajouter / Supprimer des colonnes | Add / Remove Fields,Ajouter / Supprimer des colonnes | ||||
Use STARTTLS,Utiliser le STARTTLS | |||||
Outgoing Settings,Configurations des Courriels Sortant | |||||
Incoming Settings,Configurations des Courriels Entrant | |||||
Incoming Server,Serveur de Courriel Entrant | |||||
Outgoing Server,Serveur de Courriel Sortant | |||||
Use different Email ID,Utiliser une authentification email différente | |||||
Alternative Email ID,Email de connexion alternatif | |||||
Incoming (POP/IMAP) Settings,Configuration POP/IMAP | |||||
IMAP Details,Détails IMAP | |||||
IMAP Folder,Dossier IMAP à récupérer | |||||
Document Linking,Lien vers les documents | |||||
Auto Reply,Réponse automatique | |||||
Footer Content,Contenue du pied de page | |||||
Brand Logo,Logo de la marque | |||||
Folder Name,Nom du dossier |