Home |
Last modified: 16-06-2020 |
Just a small article to gather infos about the venerable Eudora e-mail client whose development Qualcomm ended around 2006 at version 7.1.0.9 (for Windows).
It appears that the last version of the EMS (Extended Messaging Services) SDK is 4a4 from February 1998 and can be found on a few sites including this one:
ftp://ftp.qualcomm.com/eudora/developers/emsapi/
A plug-in can be used to modify the contents of an e-mail, either as it's being downloaded or displayed.
source file
ems-win.h
? Bufftype.h and .cpp
? encoding.h and .cpp
? file1847.h and .cpp
? mimetype.h and .cpp
? Rfc1847.h and .cpp
? Rfc822.h and .cpp
def
make
rc
---
#include "resource.h" // Resource IDs for dialogs and icons
#include "myplugin.h" // DLL
#include <stdio.h>
#include <malloc.h> // malloc, free
#include <string.h> // strdup
#include <istream.h> // ifstream class
#include <fstream.h> // ofstream class
#include "mimetype.h"
#include "encoding.h"
#include "rfc822.h"
? NEEDED? #include <windows.h>
#include "ems-win.h" // The EMS API
---
static const int kPluginID = 13; // Unique ID of this plugin
static const char FAR*kPluginDescription = "Pseudo-Squish Sample Plugin, v2.0";
static const unsigned long kPluginIconID = IDI_MAIN;
static const int kTransmissionPseudoSquish = 1; // Each translator needs a
static const int kArrivalPseudoSquish = 2; // unique ID within the plugin
static const int kNumTrans = 2; // How many translators in this plugin
extern CPseudoSqDLL theDLL; // (pseudosq.cpp : CPseudoSqDLL theDLL("Squish.DLL");)
int DoTransmissionPseudoSquish(ifstream& inFile, ofstream& outFile, emsProgress progress, emsMIMEtypeP FAR* out_mime);
/* Out: Plugin Version */
extern "C" long WINAPI ems_plugin_version(short FAR* apiVersion)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
*apiVersion = EMS_VERSION;
return (EMSR_OK);
}
Q: Does the API support non-Microsoft compilers (Symantec, Borland, Turbo C++, Delphi) ?
A: The EMS API is designed with a standard C interface, which means any compiler capable of exports functions as standard C will work with the EMS API.
Q: Can I write the API functions in C++ or do they need to be in C?
A: All the EMS API functions must be exported with standard C interfaces. Your plug-in can be written completely in C++, as long as you specify ‘extern "C"’ for all the EMS API functions. This is usually accomplished by using our ems-win.h file, which has the correct exporting directives.
Q: My plug-in only loads when it is the only plug-in in the "plugins" directory, or when I remove a specific plug-in for the directory, why?
A: Each plug-in must have a universally unique ID number, which your plug-in must provide during ems_plugin_init(). To ensure these ID numbers are unique across all plug-ins, they are allocated by QUALCOMM. To obtain a unique ID, send any message to <emsapi-ids@qualcomm.com>. A list of several unique IDs will be returned by an auto-responder for you to use.
ems_plugin_version (Required)
ems_plugin_init (Required)
ems_plugin_finish (Required)
ems_free
ems_plugin_config
ems_translator_info (Optional*)
ems_can_translate
ems_translate_file
ems_queued_properties (Optional)
* At least one of ems_translator_info, ems_attacher_info or ems_special_info must be defined.
ems_attacher_info (Optional*)
ems_attacher_hook
ems_special_info (Optional*)
ems_special_hook
Except ems_plugin_init , ems_plugin_finish , and ems_plugin_config all of these functions take an argument which specifies which of the translators, attachers or special tools in the plug-in is being called.
The above entry points are implemented as a set of functions in the DLL
Each plug-in must have a distinct ID number. To ensure these ID numbers are unique they are allocated by QUALCOMM. To obtain a unique ID, send a blank message to <emsapi-ids@qualcomm.com>. A list of several IDs will be returned by an auto-responder. The auto-responder doesn’t actually track IDs by individuals or organization, it just returns monotonically increasing integers, so it’s OK to request a second or third set if needed.
Each plug-in must have a distinct ID number. To ensure these ID numbers are unique they are allocated by QUALCOMM. To obtain a unique ID, send a blank message to <emsapi-ids@qualcomm.com>
5.1.0 - Unknown address error 550-'#5.1.0 Address rejected.'
There are version numbers for three things related to the EMS API. As Eudora changes it will have different version numbers. However every version of Eudora will not result in a change in the API definition so the API has its own version number. It is a single integer. It is also possible that Eudora will support multiple API versions for backward compatibility. The third version number is associated with the SDK. It may change independent of the Eudora version number.
APS
CPP
DEF
DSP
DSW
H
MAK
MDP
NCB
OPT
PLG
RC
Resources: ICO
"ANSI character set (which is a superset of ISO-8859-1)"
The author should be able to create a plug-in by creating the necessary C functions and some associated resources.
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 8bit
<x-flowed>
Content-Type: multipart/alternative;
boundary="----=_Part_20039_11983390.1195675190319"
<x-html>
blah
</x-html>
Content-Type: text/plain; charset=windows-1252
vélo -> v=E9lo
Content-Type: text/plain; charset="us-ascii"; format=flowed
vs.
Content-Type: multipart/alternative; boundary="----=_Part_24928_19148457.1185203468377"
Content-Type: text/plain; charset="us-ascii"; format=flowed
...
<x-flowed>
blah
</x-flowed>
Here's how to get rid of the X-Sender header. More infos about this header in "What is 'X-Sender' in the message header?".
If, all of sudden, Eudora can no longer connect out to a remote POP server through a SPAM server running on localhost, and poops out "Could not connect to "127.0.0.1" Cause: connection refused (10061)", it might be that the eudora.ini file is corrupt. Close Eudora, delete this file, restart Eudora and reconfigure, ie. set it to connect to 9999, and recreate Personas.
Windows Eudora Logging Instructions
Here's how to get Eudora to query Google instead of jump.eudora.com when searching the web:
Development of Eudora since in the late 90's, just when Unicode was finally starting to be mainstream. As a result, it's unable to display UTF-8-encoded e-mails.
Meanwhile, Daniel Kuhn's "UTF8 to ISO plugin V1.60 for Eudora" plug-in has a problem with some characters and cannot be worked on since the source code was lost; Thankfully, Brana Bujenovic's "Greek Message Viewer" alternative works very well to open faulty e-mails into its own window and convert characters so they're displayed as expected: