Send Mail

Purpose

To send emails through an API.

Request Details

Request URL

All - {api-domain}/crm/{version}/{module_api_name}/{record_id}/actions/send_mail

Supported modules

Leads, Contacts, Deals, Accounts, Sales Orders, Purchase Orders, Invoices, Quotes, Cases, and Custom.

Header

Authorization: Zoho-oauthtoken <access_token>

Scope

scope=ZohoCRM.send_mail.{module_name}.CREATE
(or) scope=ZohoCRM.send_mail.all.CREATE

Possible Module Names

leads, accounts, contacts, deals, quotes, salesorders, purchaseorders, invoices, cases, and custom

Sample Request

Copiedcurl "https://www.zohoapis.com/crm/v2.1/Leads/3652397000002181001/actions/send_mail"
-X POST
-H "Authorization: Zoho-oauthtoken 1000.8cb99dxxxxxxxxxxxxx9be93.9b8xxxxxxxxxxxxxxxf"
-d "@input.json"
4.0.04.x
Copied//Get instance of SendMailOperations Class
$sendMailOperations = new SendMailOperations();
$mail = new Mail();
$from = new UserAddress();
$from->setUserName("user");
$from->setEmail("user@zohocorp.com");
$mail->setFrom($from);
$to = new UserAddress();
$to->setUserName("user2");
$to->setEmail("user2@gmail.com");
$mail->setTo([$to]);
$mail->setSubject("Mail subject");
$mail->setContent("<br><a href=\"{ConsentForm.en_US}\" id=\"ConsentForm\" class=\"en_US\" target=\"_blank\">Consent form link</a><br><br><br><br><br><h3><span style=\"background-color: rgb(254, 255, 102)\">REGARDS,</span></h3><div><span style=\"background-color: rgb(254, 255, 102)\">AZ</span></div><div><span style=\"background-color: rgb(254, 255, 102)\">ADMIN</span></div> <div></div>");
$mail->setConsentEmail(true);
$mail->setMailFormat("html");
$template = new InventoryTemplate();
$template->setId("347706179");
$mail->setTemplate($template);
$wrapper = new BodyWrapper();
$wrapper->setData([$mail]);
//Call sendMail method
$response = $sendMailOperations->sendMail($recordId, $moduleAPIName, $wrapper);
Copied<?php

class SendMail
{
    public function execute(){
        $curl_pointer = curl_init();
        
        $curl_options = array();
        $url = "https://www.zohoapis.com/crm/v2.1/Leads/3652397000002181001/actions/send_mail";

        $curl_options[CURLOPT_URL] =$url;
        $curl_options[CURLOPT_RETURNTRANSFER] = true;
        $curl_options[CURLOPT_HEADER] = 1;
        $curl_options[CURLOPT_CUSTOMREQUEST] = "POST";
        $requestBody=array();
        $data=array();
        $dataObject=array();
        $cc=array();
        $ccObject=array();
        $ccObject["user_name"]="user3";
        $ccObject["email"]="user3email@zoho.com";
        array_push($cc,$ccObject);
        $dataObject["cc"]=$cc;
        $template=array();
        $template["id"]="3652397000002497001";
        $dataObject["template"]=$template;
        $bcc=array();
        $bccObject=array();
        $bccObject["user_name"]="user4";
        $bccObject["email"]="user4email@zoho.com";
        array_push($bcc,$bccObject);
        $dataObject["bcc"]=$bcc;
        $attachments=array();
        $attachmentsObject=array();
        $attachmentsObject["id"]="2cceafa194d037b63f2000181dd81864b4812b1f8b0b4fe0949a982de89fa75a";
        array_push($attachments,$attachmentsObject);
        $dataObject["attachments"]=$attachments;
        $dataObject["subject"]="Testing Send Mail API";
        $dataObject["mail_format"]="html";
        $dataObject["scheduled_time"]="2021-06-12T12:12:12+05:30";
        $dataObject["content"]="<h3><span style=\"background-color: rgb(254, 255, 102)\">Mail is of rich text format</span></h3><h3><span style=\"background-color: rgb(254, 255, 102)\"><img src=\"https://www.zohoapis.com/crm/viewInLineImage?fileContent=2cceafa194d037b63f2000181dd818646fd5e5167a274098b625c35654a20ed2\"></span></h3><h3><span style=\"background-color: rgb(254, 255, 102)\">REGARDS,</span></h3><div><span style=\"background-color: rgb(254, 255, 102)\">AZ</span></div><div><span style=\"background-color: rgb(254, 255, 102)\">ADMIN</span></div> <div></div>";
        $dataObject["in_reply_to"]="2cceafa194d037b63f2000181dd8186486f1eb0360aee76d802b6d376dea97e7";
        $dataObject["org_email"]=false;
        $replyTo=array();
        $replyTo["user_name"]="user5";
        $replyTo["email"]="user5email@zoho.com";
        $dataObject["reply_to"]=$replyTo;
        $from=array();
        $from["user_name"]="Patricia Boyle";
        $from["email"]="p.boyle@zoho.com";
        $dataObject["from"]=$from;
        $to=array();
        $toObject=array();
        $toObject["user_name"]="Jason Smith";
        $toObject["email"]="j.smith@zoho.com";
        array_push($to,$toObject);
        $dataObject["to"]=$to;
        array_push($data,$dataObject);
        $requestBody["data"]=$data;

        $curl_options[CURLOPT_POSTFIELDS]= json_encode($requestBody);
        $headersArray = array();
        
        $headersArray[] = "Authorization". ":" . "Zoho-oauthtoken " . "1000.30f3a589XXXXXXXXXXXXXXXXXXX4077.dc5XXXXXXXXXXXXXXXXXXXee9e7c171c";
        
        $curl_options[CURLOPT_HTTPHEADER]=$headersArray;
        
        curl_setopt_array($curl_pointer, $curl_options);
        
        $result = curl_exec($curl_pointer);
        $responseInfo = curl_getinfo($curl_pointer);
        curl_close($curl_pointer);
        list ($headers, $content) = explode("\r\n\r\n", $result, 2);
        if(strpos($headers," 100 Continue")!==false){
            list( $headers, $content) = explode( "\r\n\r\n", $content , 2);
        }
        $headerArray = (explode("\r\n", $headers, 50));
        $headerMap = array();
        foreach ($headerArray as $key) {
            if (strpos($key, ":") != false) {
                $firstHalf = substr($key, 0, strpos($key, ":"));
                $secondHalf = substr($key, strpos($key, ":") + 1);
                $headerMap[$firstHalf] = trim($secondHalf);
            }
        }
        $jsonResponse = json_decode($content, true);
        if ($jsonResponse == null && $responseInfo['http_code'] != 204) {
            list ($headers, $content) = explode("\r\n\r\n", $content, 2);
            $jsonResponse = json_decode($content, true);
        }
        var_dump($headerMap);
        var_dump($jsonResponse);
        var_dump($responseInfo['http_code']);
        
    }
    
}
(new SendMail())->execute();
Request JSON
  • fromJSON object, mandatory

    The user name and email address from which you want to send an email.

  • toJSON array, mandatory

    The user name and email address to which you want to send an email. Include multiple JSON objects if you want to email multiple users.

  • ccJSON array, optional

    The user name and email address that you want to cc when you send an email. Include multiple JSON objects if you want to cc multiple users.

  • bccJSON array, optional

    The user name and email address that you want to bcc when you send an email. Include multiple JSON objects if you want to bcc multiple users.

  • reply_toJSON object, optional

    The user name and email address that you want the user to reply to after receiving the mail.

  • org_emailBoolean, optional

    The value true represents that the mail is sent from the organization's email address. Note that when you set this value to true, the mail is sent through Zoho CRM's server and not through the SMTP server that you have configured. the default value is false.

  • in_reply_toString, optional

    Input this key only when you reply to an email. This key takes the previous mail's (the mail that you sent earlier) message_ID.

  • scheduled_timeDateTime in ISO8601 format, optional

    Input this key only when you want to schedule an email. The date and time must be in the ISO8601 format.

  • subjectString, optional

    The subject of the email.

  • mail_formatString, optional

    The format of the email such as plain text or rich text. The value html indicates the rich text format and text indicates the plain text format.

  • contentString, optional

    The encrypted ID obtained when you uploaded a file to ZFS using the Files API. Include multiple JSON objects if you want to attach multiple files.

  • templateJSON object, optional

    The The unique ID of the template from which the subject, content, and attachments will be included in the email. If you specify the template ID, and include the keys "subject", "content", "attachments", the values in these keys will only be considered.

Sample Input

Copied{
    "data": [
        {
            "from": {
                "user_name": "Patricia Boyle",
                "email": "p.boyle@zoho.com"
            },
            "to": [
                {
                    "user_name": "Jason Smith",
                    "email": "j.smith@zoho.com"
                }
            ],
            "cc": [
                {
                    "user_name": "user3",
                    "email": "user3email@zoho.com"
                }
            ],
            "bcc": [
                {
                    "user_name": "user4",
                    "email": "user4email@zoho.com"
                }
            ],
            "reply_to": {
                "user_name": "user5",
                "email": "user5email@zoho.com"
            },
            "org_email": false,
            "in_reply_to": "2cceafa194d037b63f2000181dd8186486f1eb0360aee76d802b6d376dea97e7",
            "scheduled_time": "2021-06-12T12:12:12+05:30",
            "subject": "Testing Send Mail API",
            "content": "<h3><span style=\"background-color: rgb(254, 255, 102)\">Mail is of rich text format</span></h3><h3><span style=\"background-color: rgb(254, 255, 102)\"><img src=\"https://www.zohoapis.com/crm/viewInLineImage?fileContent=2cceafa194d037b63f2000181dd818646fd5e5167a274098b625c35654a20ed2\"></span></h3><h3><span style=\"background-color: rgb(254, 255, 102)\">REGARDS,</span></h3><div><span style=\"background-color: rgb(254, 255, 102)\">AZ</span></div><div><span style=\"background-color: rgb(254, 255, 102)\">ADMIN</span></div> <div></div>",
            "mail_format": "html",
            "attachments": [
                {
                    "id": "2cceafa194d037b63f2000181dd81864b4812b1f8b0b4fe0949a982de89fa75a"
                }
            ],
            "template": {
                "id": "3652397000002497001"
            }
        }
    ]
}

Sample Response

Copied{
    "data": [
        {
            "code": "SUCCESS",
            "details": {
                "message_id": "2cceafa194d037b63f2000181dd8186486f1eb0360aee76d802b6d376dea22e2"
            },
            "message": "Your mail has been scheduled successfully.",
            "status": "success"
        }
    ]
}
Request JSON to send an email to the inventory modules

For inventory modules (Quotes, Sales Orders, Purchase Orders, Invoices), the inventory templates will be sent as email attachments.

  • inventory_detailsJSON object, optional

    Represents the details of the inventory template such as the template ID, paper type, and the view type.

  • inventory_templateJSON object, optional

    The unique ID of the inventory template you want to use in your email, and the name of the template.

  • paper_typeString, optional

    The paper type for digital printing. The possible values are default, A4, and us_letter. The default value is A4.

  • view_typeString, optional

    The way you want to view the template in. The possible values are portrait and landscape. The default value is portrait.

Sample request to send an email from the inventory module

Copiedcurl "https://www.zohoapis.com/crm/v2.1/Purchase_Orders/3652397000000491180/actions/send_mail"
-X POST
-H "Authorization: Zoho-oauthtoken 1000.8cb99dxxxxxxxxxxxxx9be93.9b8xxxxxxxxxxxxxxxf"
-d "@input.json"

Sample Input

Copied{
    "data": [
        {
            "from": {
                "user_name": "Patricia Boyle",
                "email": "p.boyle@abc.com"
            },
            "to": [
                {
                    "user_name": "user1",
                    "email": "user1@gmail.com"
                }
            ],
            "inventory_details": {
                "inventory_template": {
                    "id": "3652397000000187009",
                    "name": "CT Scan Machines.pdf"
                },
                "paper_type": "A4",
                "view_type": "portrait"
            }
        }
    ]
}

Sample Response

Copied{
    "data": [
        {
            "code": "SUCCESS",
            "details": {
                "message_id": "2cceafa194d037b63f2000181dd8186468a4f140fd300509994fb12dd4c97e67"
            },
            "message": "Your mail has been sent successfully.",
            "status": "success"
        }
    ]
}
Request JSON for GDPR-related data

Use the following keys when you have enabled GDPR compliance settings, and want to send an email asking for the user's consent or request data. Note that it is mandatory to send the consent form in the email's "content" key, when you ask for the lead's/contact's consent.

  • consent_emailBoolean, mandatory when you want to ask for the receiver's consent

    The value true indicates that the mail is a consent mail. The default value is false.

  • data_subject_requestJSON object, optional

    The unique ID of the data subject request and the "type".
    The "type" key takes one of the following values.

    • access - Represents that the Data Subject can view their personal data on sending an email with information about personal fields.

    • rectify - Represents that the Data Subject can rectify personal fields by sending a .CSV file containing personal information and updating changes manually.

    • rectify - Represents that the Data Subject will have a copy of their personal data in .CSV format, which can be used in other systems.

Note
  • Emails are associated to record based on Entity ID and not by email addresses in to/cc/bcc.

  • You can only send emails from one of the allowed "from" addresses.

  • For details about the edition-wise limits on the number of emails you can send, refer to Email Limits.

  • The format of including an inline image in the "content" key is <img src="https://<base-url>/crm/viewInLineImage?fileContent={file id from upload inline images api}\>

  • You must enable compliance settings and data processing for the records before you can send them the consent form in an email.

Sample request to send GDPR-related data

Copiedcurl "https://www.zohoapis.com/crm/v2.1/Leads/3652397000002181001/actions/send_mail"
-X POST
-H "Authorization: Zoho-oauthtoken 1000.8cb99dxxxxxxxxxxxxx9be93.9b8xxxxxxxxxxxxxxxf"
-d "@input.json"

Sample Input

Copied{
    "data": [
        {
            "from": {
                "user_name": "Patricia Boyle",
                "email": "p.boyle@abc.com"
            },
            "to": [
                {
                    "user_name": "user1",
                    "email": "user1email@zoho.com"
                }
            ],
            "subject": "Mail subject",
            "content": "<br><a href=\"${ConsentForm.en_US}\" id=\"ConsentForm\" class=\"en_US\" target=\"_blank\">Consent form link</a><br><br><br><br><br><h3><span style=\"background-color: rgb(254, 255, 102)\">REGARDS,</span></h3><div><span style=\"background-color: rgb(254, 255, 102)\">AZ</span></div><div><span style=\"background-color: rgb(254, 255, 102)\">ADMIN</span></div> <div></div>",
            "consent_email": true,
            "mail_format": "html",
            "data_subject_request": {
                "id": "482134000000568909",
                "type": "access"
            }
        }
    ]
}

Possible Errors

  • MANDATORY_NOT_FOUNDHTTP 400

    Either the sender's or the recipient's email address is missing in the input.
    Resolution: Use the "parent_api_name" key for the missing details in the input. For sender's email address, get the list of allowed "from" addresses through this API.

  • LIMIT_EXCEEDEDHTTP 400

    You have exceeded the maximum limit of sending 100 emails per day.
    Resolution: Send emails the next day or contact support@zohocrm.com to increase your limit.

  • NOT_ALLOWEDHTTP 400

    This feature is not supported for your edition.
    Resolution: Contact your administrator.

  • NOT_ALLOWEDHTTP 400

    The intended receiver has not consented to receive your email.
    Resolution: Per GDPR compliance, every lead/contact must grant their consent to receive emails. Send them the consent form and obtain their consent to send emails.

  • NOT_ALLOWEDHTTP 400

    The intended receiver has opted to stop email communication.
    Resolution: Per GDPR compliance, every lead/contact must grant their consent to receive emails. Send them the consent form and obtain their consent to send emails.

  • NOT_ALLOWEDHTTP 400

    The record does not have either primary or secondary email addresses.
    Resolution: The associated contact does not have an email address in the Deals module. Add either a primary, secondary, or custom email address in the Deals module to send emails.

  • NOT_ALLOWEDHTTP 400

    Emails from either the record's email address or the recipient's email address have bounced and thus, blocked.
    Resolution: Refer to the "details" key in the response to know which email address is blocked. Contact support@zohocrm.com.

  • INVALID_DATAHTTP 400

    The record ID in the request is invalid.
    Resolution: Provide a valid record ID.

  • INVALID_DATAHTTP 400

    You cannot use this email address to send mails from.
    Resolution: You can send emails only from the list of allowed "from" addresses.

  • INVALID_DATAHTTP 400

    Compliance settings are not enabled for the record.
    Resolution: You must enable compliance settings and data processing for the record before you can send emails with the consent form.

  • INVALID_DATAHTTP 400

    You have provided an incorrect encrypted ID for the attachment.
    Resolution: Refer to the "details" key to know which key has the incorrect input.

  • FILE_SIZE_EXCEEDSHTTP 400

    The total size of the attachment has exceeded 10 MB.
    Resolution: You can include multiple attachment in the email but the size of the attachments,in total, must not exceed 10 MB.

  • CUSTOM_ERRORHTTP 400

    An error occurred while connecting to the SMTP server.
    Resolution: Ensure that you give proper credentials in email configuration or login again.

  • FEATURE_NOT_SUPPORTEDHTTP 400

    Your edition does not support sending scheduled emails.
    Resolution: This feature is not available in the trial and free editions. Please contact your administrator.

  • NO_PERMISSIONHTTP 403

    You have enabled "Email Opt Out" for that record.
    Resolution: Disable "Email Opt Out" to send emails.

  • NO_PERMISSIONHTTP 403

    You have not confirmed your account.
    Resolution: Confirm the registered account to send emails.

  • NO_PERMISSIONHTTP 403

    You have not confirmed your email associated to your account.
    Resolution: Confirm the registered email.

Sample Response

Copied{
  "data": [
    {
      "code": "SUCCESS",
      "details": {
        "message_id": "96485d50b0825026b6f9c84779d96d8d4612ba6566cf2b699fa3990f68ce5645"
      },
      "message": "Your mail has been sent successfully.",
      "status": "success"
    }
  ]
}