I would assume you're using a character count on the plain text. The underlying HTML formatting characters all count toward the 32,000 maximum.
Likewise, the fact that this is copied directly from an external place (outlook) means it could have other formatting attached to it being counted. You could have the user paste into a text-only editor (notepad) ...
Salesforce limits apply, when you executing operations in SF.
Your python app will first retrieve all data from SF(Probably using BULK API) and then process it in python code, probably then upload back into SF.
The only limit you have to worry about is API limit and Bulk Job limits
Re: "There is a workaround to send emails using workflow but it won't solve our need as it won't add activity history on the record."
You could just set up the Process Builder or Workflow Rule to also create an activity on the same record. This is pretty commonplace.
But overall Salesforce does not see their CRM as a mass email system. If it's what you ...
You can request additional emails per day, as outlined in Help. You cannot purchase additional emails per day, but if you have a strong business purpose, you can have it increased temporarily or permanently.
We will not approve increase requests for Marketing purposes (New Product or Service Notifications, Sales Follow Ups, and so on).
The API call limits are those coming into Salesforce (e.g. when using the Apex Data Loader to load records). You can make as many outbound calls as you'd like, so long as you do not exceed any concurrency limits. Note that the third-party being called may have its own rate limits, so you'd need to consult the documentation for that service. For Salesforce-to-...
An integer divided by an integer results in an integer, where the fractional part will be discarded. You must convert one of the integer values to a Decimal to get the correct result.
System.debug(3/2); // Outputs 1
System.debug(3.0/2); // Outputs 1.5
To get the correct "percentage" usage of heap, you need to make one of the values a decimal:
Are you on production or sandbox? According to this link, heap size is not tracked by the sandbox environment.
Use Limits to check the values in Apex:
System.debug(LoggingLevel.Debug, 'Heap Size: ' + Limits.getHeapSize() + '/' + Limits.getLimitHeapSize());
09:43:04:672 USER_DEBUG |DEBUG| Heap Size: 8877586/6000000 Note
how the actual Heap Size ...