alibaba-cloudalibaba-cloud-direct-mail

DirectMail SingSendMail not working


I am trying the singleSendMail API from Alibaba Cloud's DirectMail, the request looks something like this

https://xx.xxxx.com/?Action=SingleSendMail
&AccountName=test@example.com
&ReplyToAddress=true
&AddressType=1   
&ToAddress=test1@example.com
&Subject=Subject
&HtmlBody=<body><h2>Test</h2></body>

I get a 400 error MissingParameter


Solution

  • The Alibaba Cloud REST API has two sets of parameters plus the signature that you must include in your request.

    Using Python as an example, you need to specify the public parameters as follows:

    parameters = {}
    
    # Add the DirectMail public request parameters
    parameters["Format"] = "json"
    parameters["AccessKeyId"] = credentials['AccessKey']
    parameters["SignatureMethod"] = "HMAC-SHA1"
    parameters["SignatureType"] = ""
    parameters["SignatureVersion"] = "1.0"
    parameters["SignatureNonce"] = get_uuid()
    parameters["Timestamp"] = utc
    parameters["Version"] = "2017-06-22"
    parameters["RegionId"] = "ap-southeast-1"
    

    The add the request parameters as follows. You will need to modify with your account information:

    # Add parameters that are always set
    parameters["Action"] = "SingleSendMail"
    parameters["AddressType"] = "1"
    parameters["ReplyToAddress"] = "true"
    
    # Add the DirectMail API parameters
    parameters["AccountName"] = dm_account
    parameters["FromAlias"] = dm_alias
    parameters["ToAddress"] = to_list
    parameters["Subject"] = subject
    parameters["HtmlBody"] = body
    parameters["textBody"] = body_text
    

    Then you will need to sign the request.

    I wrote an article about Direct Mail and generating signatures with complete working source code in Python.

    DirectMail REST API