I am writing a Python module to generate an outlook e-mail with an attachment using win32com. All works fine except for the formatting of the HTMLBody. As far as I have researched, it is impossible to do the advance formatting of the HTMLBody in Python, you can only do it in html. I have used the following link's code as my primary concern was for my body to have the current date and time whenever an e-mail is generated /.
def __Emailer(subject, recipient, cc, auto=True):
import win32com.client as win32
outlook = win32.Dispatch('outlook.application')
mail = outlook.CreateItem(0)
mail.To = recipient
mail.CC = cc
mail.Subject = subject
mail.HTMLBody = """
<html>
<head></head>
<body>
<h1>GeeksforGeeks</h1>
<h3>Approach 2: Using <time> Tag with JavaScript</h3>
<time id="current-time"></time>
<script>
function updateTime() {
const now = new Date();
const timeElement = document.getElementById("current-time");
const options = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' };
timeElement.dateTime = now.toISOString();
timeElement.innerHTML = 'Today is: ${now.toLocaleDateString(undefined, options)},
Time: ${now.toLocaleTimeString()'};
}
setInterval(updateTime, 1000);
updateTime();
</script>
<\body>
</html>
"""
mail.Attachments.Add(Source=r"C:\Users\project.xlsx")
if auto:
mail.Display(True)
else:
mail.open
But in my output I only get these h1 and h3 lines. So, basically, the inside of the <\script> does not work. Output)
I am writing a Python module to generate an outlook e-mail with an attachment using win32com. All works fine except for the formatting of the HTMLBody. As far as I have researched, it is impossible to do the advance formatting of the HTMLBody in Python, you can only do it in html. I have used the following link's code as my primary concern was for my body to have the current date and time whenever an e-mail is generated https://www.geeksfeeks./html-datetime-attribute/.
def __Emailer(subject, recipient, cc, auto=True):
import win32com.client as win32
outlook = win32.Dispatch('outlook.application')
mail = outlook.CreateItem(0)
mail.To = recipient
mail.CC = cc
mail.Subject = subject
mail.HTMLBody = """
<html>
<head></head>
<body>
<h1>GeeksforGeeks</h1>
<h3>Approach 2: Using <time> Tag with JavaScript</h3>
<time id="current-time"></time>
<script>
function updateTime() {
const now = new Date();
const timeElement = document.getElementById("current-time");
const options = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' };
timeElement.dateTime = now.toISOString();
timeElement.innerHTML = 'Today is: ${now.toLocaleDateString(undefined, options)},
Time: ${now.toLocaleTimeString()'};
}
setInterval(updateTime, 1000);
updateTime();
</script>
<\body>
</html>
"""
mail.Attachments.Add(Source=r"C:\Users\project.xlsx")
if auto:
mail.Display(True)
else:
mail.open
But in my output I only get these h1 and h3 lines. So, basically, the inside of the <\script> does not work. Output)
Share Improve this question asked Feb 10 at 17:16 user21580855user21580855 9 1- 1 This question is similar to: Is JavaScript supported in an email message?. If you believe it’s different, please edit the question, make it clear how it’s different and/or how the answers on that question are not helpful for your problem. – JonSG Commented Feb 10 at 17:28
1 Answer
Reset to default 1Outlook will never run any scripts in HTML body for the security reasons.
Nothing, however, prevents you from hardcoding a placeholder in the HTML body and replacing it with the actual value before assigning to the mail.HTMLBody
property - it is just a string.