Smartermail API wrapper for coldfusion - version 1.3.1

smartermail iconFor all of you who have Smartermail as their mailserver software, I just made your life a bit easier!
You probably already know that it is not possible inside of smartermail, to change user settings for all existing customers in one time? You can change the Defaults for new users, but existing, nehh.
Since I needed to do some global changes for a few hundred accounts, I decided to check out the Smartermail API. And what began as a simple task, turned into my newest opensource Coldfusion project: the Smartermail API wrapper for coldfusion, complete with a UI for everyone!

The main file that cfml developers will use is smartermail.cfc , which does the actuall call to the webservice.
All other people (also non-coldfusion-people) can use the API wrapper UI which I also built.

Versions

17 june 2011: Version 1.3.1
Fixes a bug which made some API calls fail: all arguments were xmlFormatted, while some of these arguments needed to actually be shown as xml (i.e. <string>email@domain.com</string>).

26 february 2011: Version 1.3.0
Added extra no-compression headers to the http api call, to fix an Adobe CF bug. Updated the UI to allow domain admins to login and use the functionality.

01 december 2010: Version 1.2

Added debugging options in the Smartermail.cfc file; added optional extra debugging in the UI files; enhanced the UI a bit.

28 march 2010: Version 1.1

Changes in the smartermail API wrapper code, to make it CF7/8 compatible. (it used to be Railo + CF9 only)

9 may 2010: Version 1.1.1

The api wrapper now uses the xmlFormat() function for all values in the soap call. The smartermail api wrapper UI now shows a textarea when the field for an api function has 'description' in it's name. Also, all form values are now escaped with htmleditformat() when the form is shown again after submit. Also, some minor text/layout change.

Download the code

WSDL? No, just cfhttp ;-)

One of the biggest irritations with webservices is the wsdl itself, and the flunky way some versions of coldfusion handle it. For me, the simpler you can do it, the better. Web services are just a way of communication: I send an xml package with a question inside, and I get an xml package returned with the answer. That's it.
So, I decided to not use <cfinvoke>, but just <cfhttp>:

<cfhttp method="post" url="#this.serverURL#/Services/#arguments.page#.asmx" throwonerror="yes" result="cfhttpReturn_struct">
    <cfhttpparam type="header" name="Content-Type" value="application/soap+xml" />
    <cfhttpparam type="body" value="#soapBody#" />
</cfhttp>

The UI

As you can see in the example pages, all the methods are there, complete with the documentation and an example of the soap xml which is used. If you just want to use the UI, then just don't care about the xml; it's all done for you. Just fill in the displayed form, and you're fine!

For starters, you have to login with your server credentials. After that, a check is done to see if the credentials are correct.
Then, you are ready to go!

All of the options can also be done in your smartermail administrator, but I've made a few extras...
You can manage the settings for multiple email addresses in one time, and even for multiple domains in one time. If, for example, you want to change the mailbox size of 200 users, you only have to do one call! (hmm, wasn't that the thing I originally just needed to do?)

How to use the API wrapper yourself.

First, create the smartermail-object with the admin details:

<cfset variables.smartermail_obj = createObject("component", "Smartermail").init(serverURL="http://webmail.yourserver.com", wsUsername="your admin username", wsPassword="your admin password") />

Then, you can call any function you like, like this:

<cfset return_xml = variables.smartermail_obj.callWs(page='svcDomainAdmin', method='GetAllDomains') />

In case you need to give extra arguments to the page you are calling, you supply the extra argument 'args', like this:

<cfset extraArguments_struct = structNew() />
<cfset extraArguments_struct['DomainName'] = "somedomain.com" />
<cfset return_xml = variables.smartermail_obj.callWs(page='svcUserAdmin', method='GetUsers', args=extraArguments_struct) />

If you want to find out which arguments you need, then just check the UI test pages!

In the example pages I created an option to manage the settings for multiple domains and email addresses in one time. This is actually pretty simple to do, since you only have to loop over a list, like this:

<cfset emailList = "email1@domain.com,email2@domain.com,email9@otherdomain.com" />
<cfloop list="#emailList#" index="email">
<cfset form.EmailAddress = email />
<cfset extraArguments_struct = structNew() />
<cfset extraArguments_struct['EmailAddress'] = email />
<cfset return_xml = variables.smartermail_obj.callWs(page="svcUserAdmin", method="GetUser", args=extraArguments_struct) />
<!--- you might want to do something with the xml you retrieved here --->
</cfloop>

When one of the parameters has multiple values (i.e. 3 mail addresses for 1 alias), then you need to send the 3 mailaddresses as an CRLF-delimited list, like this:

<cfset extraArguments_struct = structNew() />
<cfset extraArguments_struct['DomainName'] = "domain.com" />
<cfset extraArguments_struct['AliasName'] = "allclients" />
<cfset extraArguments_struct['Addresses'] = "info@client1.com
info@client2.com
peter@client3.com" />
<cfset return_xml = variables.smartermail_obj.callWs(page="svcAliasAdmin", method="AddAlias", args=extraArguments_struct) />

Debugging (new since version 1.2.0)

In case you need to debug the API calls, you can now simply save all request and response data to any scope you want.
To start, you need to add 2 arguments to the init function like this:

<cfset variables.smartermail_obj = createObject("component", "Smartermail").init(
serverURL="http://webmail.yourserver.com"
, wsUsername="your admin username"
, wsPassword="your admin password"
, debugMode=true
, debugDataScopeName="request / application / this / server"
) />

By default, debugMode is off. The default for the debugDataScopeName is "this", which means that the debug data will be stored inside the cfc.

The debug data will be stored as "SMDebugData", so for example application.SMDebugData. It is an array with structs, containing the keys Date, Title, and Data. But you can access this debug data even more easily, by calling

<cfset myDebugData = variables.smartermail_obj.getDebugData() />

Usefull?

I hope you like and use the code! If so, leave me a comment; I'd like it!

Better yet, if you need a coldfusion (or Railo!) developer, hire me!

del.icio.us Digg StumbleUpon Facebook Technorati Fav reddit Google Bookmarks
| Viewed 3816 times
  1. Ricardo

    #1 by Ricardo - January 13, 2010 at 5:27 PM

    Hi Paul,
    I downloaded the package and tried to run, but it seems to miss a folder required by the Application.cfm, /wddx/methodArguments.wddx
    Can you send that to me ?
    Thanks.
  2. Paul Klinkenberg

    #2 by Paul Klinkenberg - January 13, 2010 at 5:44 PM

    Hi Ricardo, well, that's just got to mean you're the first one who wanted to use it ;-)
    I updated the zip file to include *all* the files: http://www.coldfusiondeveloper.nl/smartermail-api-wrapper/Smartermail-API-wrapper-coldfusion.zip

    Let me know if you have any questions!
    Regards, Paul
  3. Ricardo

    #3 by Ricardo - January 13, 2010 at 5:51 PM

    Paul,
    Thanks for your attention. I'm hoping to successfully access our mail server though the API, since the tests I've done by reading SmarteTools documents were a failure.
    I'll keep you posted of my results.
    By the way, do you want a free email account at our domain CFDEVELOPERS.NET ? Just let me know which username you want.
    Best regards,
    Ricardo
  4. Paul Klinkenberg

    #4 by Paul Klinkenberg - January 13, 2010 at 6:08 PM

    Hi Ricardo, Thanks for the offer, but I am already using too much email addresses :)
    (and paul@coldfusiondeveloper.nl is also quite catchy I think ;)

    Hope to hear about your results!
    Paul
  5. Ricardo

    #5 by Ricardo - January 15, 2010 at 6:06 PM

    @Paul,
    I am using your API successfully to check email accounts, get a list of users and aliases, add new user and add new alias.
    One thing that I need to know is how to pass multiple addresses for an alias. When I send just one address in "params.Addresses" it works fine, but if I send multiple addresses in a comma or pipe delimited list, it creates the alias with none addresses.
    I tried to send them as an array, then I got an error from your API.
    Any light on that ?
    Thanks.
  6. Paul Klinkenberg

    #6 by Paul Klinkenberg - January 15, 2010 at 6:31 PM

    You can add multiple '[string]email[/string]' tags inside the Addresses tag.
    You could've also found out by using the API UI btw :)
    http://www.coldfusiondeveloper.nl/smartermail-api-wrapper/index.cfm?method=AddAlias&page=svcAliasAdmin

    Good luck, Paul
  7. Ricardo

    #7 by Ricardo - January 15, 2010 at 7:20 PM

    Paul,
    Here is the deal, I receive the operations request from a PHP page in a XML-RPC package, which I transform into ColdFusion structure, then do my validations, modify some parameters and then I call your API which converts my parameters into a SOAP and communicates with SmarterMail.
    I found out that if I send the multiple addresses in my parameter "params.Addresses" as a CR-LF delimited list, IT WORKS!.
    Then I transform your results back into XML-RPC for the PHP page to understand it.
    I'm very happy with your API, it solved our big problem here.
    I will blog about it in the near future and link to your blog.
    Thanks for your good job.
  8. Paul Klinkenberg

    #8 by Paul Klinkenberg - January 17, 2010 at 3:34 PM

    Yes that's true, if you made your own implementation based on the cfc, then you need to delimite the list by line-breaks (\r and/or \n)
    Well, hope to see your blog post in the near future!
  9. Ty Whalin

    #9 by Ty Whalin - March 10, 2010 at 3:32 AM

    Okay, I'm going to spend some time looking at the wrapper which may come to use for me since all the site I host use Smarter Mail. But I got one for ya that I can't seem to get right just yet.

    Do you possibly have a simple solution for checking domain name availability? I have spent several days trying to make the code work but no luck yet.

    I've done extensive searching for this type of process with CF but not much has came up. As a matter of fact that's how I found your wrapper. Is to complex for me at the moment buy I'm gaining CF speed.

    THX in advance.
  10. Paul Klinkenberg

    #10 by Paul Klinkenberg - March 10, 2010 at 11:15 AM

    Hi Ty, I don't know what your search words were, but when I do a google search, this is the first result: http://www.bennadel.com/blog/1410-Ask-Ben-Checking-Domain-Name-Availability-Using-ColdFusion.htm

    Good luck!
  11. Ty Whalin

    #11 by Ty Whalin - March 11, 2010 at 3:59 PM

    That's the only one I could find for checking domain name availability. I've tried to get that to work but it keeps returning domain name available no matter what site I search for availability.

    What I'm trying to do is run a CGI_SCRIPT_NAME on my form and then output the information on my page instead of using the hardcoded url's Ben supplied.

    At first there was an error with the <pre></pre> part in the MatchNoCase Expression and was getting a position not found error. After I got past that catch error it continues to say every name is available.

    Thinking it might be something to do with the way my form submits. Set to get method by the way. If you've ever used beens code and got it to work let me know.

    THX for your time.
  12. Paul Klinkenberg

    #12 by Paul Klinkenberg - March 11, 2010 at 5:13 PM

    Did you check the url that is used to get the domain check report? It is http://reports.internic.net/cgi/whois
    On that page, it says "Search (.aero, .arpa, .asia, .biz, .cat, .com, .coop, .edu, .info, .int, .jobs, .mobi, .museum, .name, .net, .org, .pro, or .travel)"
    I guess you're trying to check another extension, which is simply not supported.

    If you check .com domains, it will work; I tested.
  13. Jack

    #13 by Jack - March 26, 2010 at 7:12 AM

    Hi Paul,
    I have installed your zip and I am unable to view the index.cfm in my browser. The error is
    "Template Exception - in SMadminWrapper\index.cfm : line 83
        Missing argument name.'"

    I have not changed anything or added any code yet... Just tring to get it to load right now. Could you help.
  14. Paul Klinkenberg

    #14 by Paul Klinkenberg - March 26, 2010 at 7:50 AM

    Hi Jack, could you provide some more details? What Coldfusion version are you running? Or better: can you pass me a link to your install? You can mail it if you want, to paul at ongevraagdadvies.nl.
  15. Jack

    #15 by Jack - March 29, 2010 at 4:58 PM

    Thank you Paul for the updated backward compatible ver 1.1. I installed it and there does not seem to be any issues on CF 8 or CF 9 Enterprise Servers (not running Railo). I will continue testing each method and let you know if I find any issues.
  16. Sarah

    #16 by Sarah - April 28, 2010 at 10:44 AM

    Hi, is this a way to send paragraphed text, ie. each line would be a list item? is there a different way to send paragraphed text that would usually be wrapped in <![CDATA[]>
    when making say a SOAP call?
  17. Pardeep

    #17 by Pardeep - May 2, 2010 at 9:02 PM

    @Paul Klinkenberg

    This API is frickin awesome time saver man. Thanks so much:)
  18. Paul Klinkenberg

    #18 by Paul Klinkenberg - May 5, 2010 at 11:56 PM

    @pardeep thanks :-)
    @Sarah: I have made a new version of the cfc and the ui files, with which you can use paragraphed text (html text and/or line breaks). You can only find it in the svn browser, since I have had no time to make an official new release. Good luck with it!
  19. paul

    #19 by paul - May 9, 2010 at 9:31 PM

    Hi,

    I'm new to this - I'm trying to use the API to update a single email address

    Can you give me a sample cfinvoke and relevant arguments that are needed to get going on this?

    Thanks

    Paul
  20. Paul Klinkenberg

    #20 by Paul Klinkenberg - May 9, 2010 at 9:49 PM

    Hi Paul, so which part of the "How to use the API wrapper yourself." section is unclear? Do you only need the "relevant arguments", or is anything else unclear as well?
    The arguments, you can find when looking at the UI. You probably need UpdateUser in the svcUserAdmin: http://www.coldfusiondeveloper.nl/smartermail-api-wrapper/index.cfm?method=UpdateUser&page=svcUserAdmin
    Hope it works for you! Paul
  21. Grant B.

    #21 by Grant B. - May 12, 2010 at 7:49 PM

    What versions of SmarterMail is this for? I am trying to use it with SM 4.3 but the web service does not seem to recognize the 'disablegreylisting' key for the SetRequestedUserSettings function in svcUserAdmin.

    I even tried GetRequestedUserSettings but smartermail simply ignores the 'disablegreylisting' value. It returns other string/value pairs but not 'disablegreylisting' ... actually also does the same with 'lockpassword'.

    Any idea where I would find a list of the keys for version 4.3?
  22. Paul Klinkenberg

    #22 by Paul Klinkenberg - May 13, 2010 at 11:31 AM

    Hi Grant, I have only tested this on the most recent smartermail, 6.5?
    You can find instructions for your own api interface by going to those pages... By default it shows you the soap xml. The urls are shown when you use the UI available from this post.
    Good luck!
  23. Clay Owensby

    #23 by Clay Owensby - December 1, 2010 at 2:11 PM

    Hi Paul, I am looking through your api and it looks great. I have downloaded what I think is the latest version of the application and I contiune to get an error on the index page. You can see it at http://ourppimarketing.com/wrapper/ . I saw a post earlier in the blog with the same issue. Invalid construct: Either argument or name is missing. I am running cf 9. Your help is greatly appreciated.
  24. Paul Klinkenberg

    #24 by Paul Klinkenberg - December 1, 2010 at 2:23 PM

    Hi Clay, the error you are having is from an earlier version. The current verion 1.1.1 does not have this problem: http://www.railodeveloper.com/svn.cfm?repositorypath=smartermail-api-wrapper/Smartermail-API-wrapper-coldfusion-v1.1.1.zip%3A80&download=1
    Good luck, Paul
  25. Clay Owensby

    #25 by Clay Owensby - December 1, 2010 at 7:10 PM

    Paul, thank you for the help. I am now getting a Error occured in smartermail.cfc:
    Connection Failure: Status code unavailable error. I have tried the domain and administrators credentials in the smartermail.cfc and either seem to work. Suggestions?
  26. Clay Owensby

    #26 by Clay Owensby - December 1, 2010 at 7:29 PM

    HI, Ricardo. I too am tried to access my SmarterMail server with Paul's api. I can't seem to connect. I continue to get a connection failure. Did you see this issue when setting up this api in your system?
  27. Paul Klinkenberg

    #27 by Paul Klinkenberg - December 1, 2010 at 10:38 PM

    Hi all, I just released version 1.2.0 of the API wrapper! The changes: "Added debugging options in the Smartermail.cfc file; added optional extra debugging in the UI files; enhanced the UI a bit."
  28. Paul Klinkenberg

    #28 by Paul Klinkenberg - December 1, 2010 at 10:45 PM

    @Clay: I tried to login to my own smartermail server from the code hosted on your server, and also got the Connection failure. It is definately a problem with your server or hosting company. It gives the error within 1 second or so, that's abs. not normal. Is it in general possible to use cfhttp on that server?
    Regards, paul
  29. Clay Owensby

    #29 by Clay Owensby - December 1, 2010 at 10:48 PM

    @Paul Klinkenberg Yes I can use cfhttp with other sites on this server.
  30. Jacki

    #30 by Jacki - December 14, 2010 at 5:07 PM

    REMEMBER if you are using cfhttp over SSL ... directly import your SSL certificate into the Keystore in the JRun Server. Maybe that will help. I have found that to get rid of my connection errors in the passed.
  31. Clay Owensby

    #31 by Clay Owensby - December 14, 2010 at 5:31 PM

    Thanks Jackie. You are right. This situation was a bit more simple. I merely needed to add the following headers to my http post

    <cfhttpparam type="Header" name="Accept-Encoding" value="deflate;q=0" />
    <cfhttpparam type="Header" name="TE" value="deflate;q=0" />
    <cfhttpparam type="header" name="Content-Type" value="application/soap+xml" />
  32. Clay owensby

    #32 by Clay owensby - December 16, 2010 at 10:44 PM

    Hey guys I think I have worked out a lot of bugs. I can now contact my sm server and can see information contained in lists, subscribers, domains, ect. I am having one issue. I cant add a subscriber to a list. I get back the xml struct giving me a response code of -2 and the text that goes along saying that the process failed. Does anyone have experience with this?
  33. Jacki

    #33 by Jacki - December 17, 2010 at 12:15 AM

    It took me a while to remember that JAVA is case sensitive, so make sure your values are "True" instead of "true". That also keep me from getting lots or return errors.
  34. Clay Owensby

    #34 by Clay Owensby - December 17, 2010 at 12:26 AM

    @Jacki You know I bet you are right... I just went into Paul's wrapper and copied what he had.... I bet that was it.
  35. Paul Klinkenberg

    #35 by Paul Klinkenberg - December 18, 2010 at 6:12 PM

    @Jacki: why do you say JAVA? Smartermail is built with .net, and coldfusion/railo is not case-sensitive. If you need to set boolean values, just use 1 and 0. That will always work.
  36. Jacki

    #36 by Jacki - December 20, 2010 at 6:36 PM

    YOU are correct Paul. It is the JRUN server that is Java and thats what is powering the ColdFusion. I have just found that when using your wrapper with "True" or "true" it has made a difference in returning an error or not. Just letting people in on what helped for me.
  37. Clay Owensby

    #37 by Clay Owensby - December 23, 2010 at 4:47 PM

    Can anyone point me in the direction of how to retrieve a list of bounces from an active mailing list?
  38. Eric Do

    #38 by Eric Do - February 25, 2011 at 4:55 PM

    I recevied connection failure everytime when I try to call the object to login:

    <cfset variables.smartermail_obj = createObject("component", "Smartermail").init(serverURL="http://mail.wwb-mail.com:9998/";, wsUsername="== REMOVED ===", wsPassword="== REMOVED ==") />

    Is this because that SmarterMail server is running on port 9998 instead of 80?

    If you go to this mail client address: http://mail.wwb-mail.com:9998/ and type in
    email: XXXXXXXXXXXXX
    password: XXXXXXXX

    it will allow you to login. Can you please let me what I am missing.

    Also, assume that I can login, what API that I need to call to create/add a New User from my CF page.

    Please advice. Thank you in advance. Great works for putting this together.
  39. Eric Do

    #39 by Eric Do - February 25, 2011 at 5:35 PM

    After reading the previous thread, append below code to the cfhttp post, now I got an Invalid Permissions response. Any idea on how this may happen?

    <cfhttpparam type="Header" name="Accept-Encoding" value="deflate;q=0" />
    <cfhttpparam type="Header" name="TE" value="deflate;q=0" />



    <?xml version="1.0" encoding="utf-8"?>
    <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; xmlns:xsd="http://www.w3.org/2001/XMLSchema">;
    <soap:Body>
    <GetAllDomainsResponse xmlns="http://tempuri.org/">;
    <GetAllDomainsResult>
    <Result>false</Result>
    <ResultCode>-20</ResultCode>
    <Message>Invalid Permissions.</Message>
    <DomainNames />
    </GetAllDomainsResult>
    </GetAllDomainsResponse>
    </soap:Body>
    </soap:Envelope>
  40. Eric Do

    #40 by Eric Do - February 25, 2011 at 5:46 PM

    Received 500 Internal Server Error error when trying to call the method to AddUser. Can you please let me know on how get rid of this error and how to AddUser from the CF template.

    Thanks,


    The error occurred in C:\Inetpub\wwwroot\CRM\_wwb\api\SmarterMail\Smartermail.cfc: line 88

    86 :          <cfhttpparam type="Header" name="TE" value="deflate;q=0" />
    87 :          <cfhttpparam type="header" name="Content-Type" value="application/soap+xml" />
    88 :          <cfhttpparam type="body" value="#soapBody#" />
    89 :       </cfhttp>
    90 :
  41. Eric Do

    #41 by Eric Do - February 25, 2011 at 5:56 PM

    After reviewing the API and the params that required to AddUser, IsDomainAdmin set to 0 or 1. I was typed in True/False, Yes/No, therefore I didn't get any response from the post.

    Great works Paul. You guys are awesome! This will save our time from having to get on the SmarterMail UI.
  42. Paul Klinkenberg

    #42 by Paul Klinkenberg - February 26, 2011 at 1:21 AM

    Hi Eric, great to see that you got it working in the end!
    Due to your messages, I did 2 actions:
    - I (finally) updated the code to include the "deflate" headers, which fixes a bug in Adobe CF, which gave you the "connection failure" message.
    - I now made it more clear in the example pages, that the only valid logins you can use for the api wrapper, are Smartermail's "Domain admins" and "System admins".

    @Everyone: a new version 1.3 is now available for download :-)
  43. Eric Do

    #43 by Eric Do - February 26, 2011 at 6:13 AM

    Paul, thank you for your response. About the API wrapper, did you have a chance to test with the latest version of SmarterMail?

    I tested with the 5.0 version, everything seem to work perfect but for the 7.1 version, I can't seem to get pass the login page.

    I received the 500 error message when try to login to the 7.1 version.
  44. Paul Klinkenberg

    #44 by Paul Klinkenberg - February 26, 2011 at 1:18 PM

    Hi Eric, I am currently running SmarterMail Enterprise 7.4, which is working for me. Have you tried it using the new version I just released?
    Also, you could check to see if the error is specific to your server / CF version, by testing the login via my test environment: http://www.railodeveloper.com/smartermail-api-wrapper/index.cfm
    If you want professional assistance, you can mail me at paul at railodeveloper.com.
    Cheers, Paul
  45. Eric Do

    #45 by Eric Do - February 28, 2011 at 6:54 PM

    Hello Paul, thank you for your support. I just downloaded the latest version of your API (1.3) and test it against our new version of SmarterMail; it is working really well.

    Now that we know are you the expert in SmarterMail and the CF bridge, when our guys need any professional consultant in the near future, we will inform you.

    Your help is much appreciated, Eric.
  46. Russ Michaels

    #46 by Russ Michaels - March 21, 2011 at 4:21 AM

    Cool stuff Paul, I just started writing a SmarterMail API myself and came across this by accident, so will save me several hours work.
    Interesting way of generating the SOAP requests too, certainly a lot less code than the way I was doing it anyway :-)
    I have noticed one issue though, the smartermail.cfc can't find the wddx file if the calling template is in a different folder as the ExpandPath() function is working relative to the calling template and not the CFC.
    You get around this by using a cfinclude instead.

    <cfsavecontent variable="q"><cfinclude template="wddx/methodArguments.wddx"></cfsavecontent>
  47. Russ Michaels

    #47 by Russ Michaels - March 21, 2011 at 4:40 AM

    One other minor niggle Paul, it can't be called with CFINVOKE (yes some of us do still like to use cfinvoke so there) as the methods also require a method arg, and you can't have 2 args with the same name.
  48. Paul Klinkenberg

    #48 by Paul Klinkenberg - March 21, 2011 at 4:11 PM

    Hi Russ, what CFML engine and version are you using? The cfinclude solution works, as long as there is no cfml code in the included template.
    I also use cfinvoke a lot, and then mostly use cfinvokeargument to add the arguments. I do not yet understand how the 'args' attribute could lead to problems with cfinvoke; could you explain? Cheers, Paul
  49. Russ Michaels

    #49 by Russ Michaels - March 26, 2011 at 1:10 AM

    Hey Paul, do you by any chance know where you set the catch-all address for a domain, I can't seem to find this in DomainAdmin or UserAdmin params, unless I am just being blind.
  50. Paul Klinkenberg

    #50 by Paul Klinkenberg - March 26, 2011 at 4:06 PM

    Nope, I don't know. You could search the API documentation pdf for "catchall" I guess...
  51. Eric Do

    #51 by Eric Do - March 28, 2011 at 10:24 PM

    Hello Paul,

    When call the AddUser method to add a new user email account (assume that the new email account that I wish to create is eric123@myemaildomain.com), how do I make/specify 'eric123@myemaildomain.com' automatically insert into the Reply-To Email Address.

    The reason because when the Reply-To Email Address is blank and when try to send email from eric123@myemaildomain.com to a Gmail or other client, it show 'eric123' instead of the actual Display Name (FirstName LastName) that is set when setup a new account.

    Please advice and thank you in advance,

    Eric
  52. Humberto Fujitani

    #52 by Humberto Fujitani - June 16, 2011 at 8:56 PM

    Hello Paul,

    This API is very good. I would just like to clarify a doubt about "SetSubscriberList" method:

    I submit to my script a list of emails, separated by commas. My script uses the code below to handle this list and send it to the SmarterMail mailing list:

    <cfsavecontent variable="listsub">
    <cfoutput>
    <cfloop index="destination" list="#form.emails#" delimiters=",">
    #destination#
    </ cfloop>
    </ cfoutput>
    </ cfsavecontent>

    <cfset setList_struct = structNew() />
    <cfset setList_struct['DomainName'] = "list.rtibrasil.com" />
    <cfset setList_struct['ListName'] = "newsrti" />
    <cfset setList_struct['Subscribers'] = "#listsub#" />
    <cfset return_xml = variables.smartermail_obj.callWs(page="svcMailListAdmin", method="SetSubscriberList", args=setList_struct) />

    However, when I look at subscribers of mailing list "newsrti", the list is empty. May you help me solve this?

    Thanks,

    Humberto
  53. Paul Klinkenberg

    #53 by Paul Klinkenberg - June 17, 2011 at 9:34 AM

    Hi Humberto, thanks for reporting this. It was a bug in the code.
    See the new version 1.3.1, which should fix this.

    Paul
  54. Humberto Fujitani

    #54 by Humberto Fujitani - June 17, 2011 at 2:20 PM

    @Paul Klinkenberg

    Hello Paul,

    Thanks for the new version, the "SetSubscriberList" method seems to work fine now.

    Best regards,

    Humberto
  55. Andor Admiraal

    #55 by Andor Admiraal - September 24, 2011 at 9:42 PM

    Hi Paul,

    Great little tool. Really a big time saver for me, thanks! Did not encounter any bugs at all, works very smoothly for me.

    One hint that other people might find useful. An easy way to directly use the XML the tool outputs, is the following:

    1. Copy the XML code to the clipboard
    2. Paste it into a new text file
    3. Give the text file an .xml extension
    4. Now you can open it as an XML table in Excel

    Thanks again, regs from India
  56. Paul Klinkenberg

    #56 by Paul Klinkenberg - September 25, 2011 at 8:27 PM

    Hi Andoor, I really appreciate your comment, thanks!
    Normally, if I get a "new comment" email, I prepare myself for some bug fixing or explaining ;-)
    Kind regards, Paul
  57. Akos

    #57 by Akos - January 18, 2012 at 11:59 AM

    Hi, I've listed and added users successfully with the svcUserAdmin service.
    But now I'm trying to delete a user using the DsvcUserAdmin.DeleteUser().
    The API comes back with DeleteUserResult, ResultCode 0, Result True.
    I assume that means it's successful yet the user is not deleted from smartermail.
    Any suggestions please?
  58. Akos

    #58 by Akos - October 31, 2012 at 3:32 PM

    @Akos
    Does anyone have any solution to the above post #57 please ?
(will not be published)
Leave this field empty

punishment-molecule