Kaizen #86 - PHP SDK [Part III]

Kaizen #86 - PHP SDK [Part III]

Hey there!
Welcome back to yet another insightful post in our Kaizen series!

In this post, we will continue the journey of PHP SDK sample codes for Record Operations from last week. Let us delve into a new set of use-cases and expand your horizons with additional examples in the Record and Send Mail Operations. 

1. Subforms

To add subform details of a record during a record create/update, use the following format.

$subformVar = new Record();
$subformVar->addKeyValue("Subform_Field_API_Name", "FieldValue");
$record->addKeyValue("Subform_API_Name", [$subformVar]);

Repeat the second line of the above code to add as many fields as you have in your subform layout. To add multiple subform records, you will have to map the fields within a new object for each subform record. 

Here is a sample code to update the details of a custom subform in Contacts. 

<?php

use com\zoho\crm\api\HeaderMap;
use com\zoho\crm\api\record\BodyWrapper;
use com\zoho\crm\api\record\RecordOperations;
use com\zoho\crm\api\record\Contacts;
use com\zoho\crm\api\util\Choice;
use com\zoho\crm\api\record\Record;

require_once "vendor/autoload.php";

class UpdateRecord
{
   public static function initialize()        
   {
 // add initialisation code
 // refer to the previous post for details and examples 
   }

public static function updateRecord1(string $moduleAPIName, string $recordId)
    {
        $recordOperations = new RecordOperations();

        $request = new BodyWrapper();

        $record = new Record();
        $record->addFieldValue(Contacts::LastName(), "Boyle");
        $subformRec1 = new Record();
        $subformRec1->addKeyValue("Language_Proficiency", new Choice("English"));
        $subformRec1->addKeyValue("Personal_Email", "patricia.boyle@zylker.com");
        $subformRec1->addKeyValue("Secondary_Phone", "9876543210");
        $record->addKeyValue("Proficiency_and_Others", [$subformRec1]);
        $request->setData([$record]);
        $headerInstance = new HeaderMap();
        $response = $recordOperations->updateRecord($recordId, $moduleAPIName, $request, $headerInstance);
 //Add your code to handle the response received in $response
 // For more details, see here.
    }
}

UpdateRecord::initialize();
$moduleAPIName = "Contacts";
$recordId = "5545974000002858001";
UpdateRecord::updateRecord1($moduleAPIName, $recordId);
?>

2. Line Items and Line Taxes in Inventory Modules

2.1 Product Line Items and Product Line Taxes

To add or update product line items and their product line taxes in the Inventory module, use the following format.

$lineItemVar = new Record();
$lineItemProductVar = new LineItemProduct();
$lineItemProductVar->setId("product_id");
$lineItemVar->addKeyValue("Product_Name", $lineItemProductVar);
$lineItemVar->addKeyValue("Quantity", Value);
$lineItemVar->addKeyValue("ListPrice", Value);
$lineItemVar->addKeyValue("Discount", Value);
$productLineTaxVar = new LineTax();
$productLineTaxVar->setName("Tax_Name");
$productLineTaxVar->setPercentage(Value);
$lineItemVar->addKeyValue('Line_Tax',  [$productLineTaxVar]);

Repeat this code to add multiple products to the inventory record.
Note that when you update any one of the line items in the inventory records, the remaining line items will become null and have to be re-added to the list. 

2.2 Inventory Record Line Taxes

To add line taxes to an inventory record, use the following format.

$lineTaxVar = new LineTax();
$lineTaxVar->setName("Tax_Name");
$lineTaxVar->setPercentage(Value);
$record->addKeyValue('$line_tax', [$lineTaxVar]);

The 'line_tax' represents the tax amount specific to each line item. Whereas, the '$line_tax' represents the tax applied to the overall products in the line item list.

Following is a sample code to create a record in the Quotes module.

<?php

use com\zoho\crm\api\HeaderMap;
use com\zoho\crm\api\record\BodyWrapper;
use com\zoho\crm\api\record\LineTax;
use com\zoho\crm\api\record\LineItemProduct;
use com\zoho\crm\api\record\RecordOperations;
use com\zoho\crm\api\record\{Accounts, Contacts, Quotes, Deals};
use com\zoho\crm\api\record\Record;

require_once "vendor/autoload.php";

class CreateRecords
{
    public static function initialize()
    {
 // add initialisation code
 // refer to the previous post for details and examples 
   }

   public static function createRecords(string $moduleAPIName)
    {
        $recordOperations = new RecordOperations();
        $bodyWrapper = new BodyWrapper();
        $record = new Record();
        $record->addFieldValue(Quotes::Subject(), "Quote No 1");
        $AccountName = new Record();
        $AccountName->addFieldValue(Accounts::id(), "55459742858119");
        $record->addFieldValue(Quotes::AccountName(), $AccountName);
        $dealName = new Record();
        $dealName->addFieldValue(Deals::id(), "55459742858125");
        $record->addFieldValue(Quotes::DealName(), $dealName);
        $contactName = new Record();
        $contactName->addFieldValue(Contacts::id(), "55459742858122");
        $record->addFieldValue(Quotes::ContactName(), $contactName);

         //product 1
        $inventoryLineItem1 = new Record();
        $lineItemProduct1 = new LineItemProduct();
        $lineItemProduct1->setId("55459742897004");
        $inventoryLineItem1->addKeyValue("Product_Name", $lineItemProduct1);
        $inventoryLineItem1->addKeyValue("Quantity", 2.0);
        $inventoryLineItem1->addKeyValue("ListPrice", 150.0);
        $inventoryLineItem1->addKeyValue("Discount", "5%");
        $productLineTax = new LineTax();
        $productLineTax->setName("Sales Tax");
        $productLineTax->setPercentage(2.0);
        $inventoryLineItem1->addKeyValue('Line_Tax', [$productLineTax]);

         //product 2
        $inventoryLineItem2 = new Record();
        $lineItemProduct2 = new LineItemProduct();
        $lineItemProduct2->setId("55459742897009");
        $inventoryLineItem2->addKeyValue("Product_Name", $lineItemProduct2);
        $inventoryLineItem2->addKeyValue("Quantity", 1.0);
        $inventoryLineItem2->addKeyValue("ListPrice", 100.0);
        $inventoryLineItem2->addKeyValue("Discount", "3%");
        $productLineTax1 = new LineTax();
        $productLineTax1->setName("Sales Tax");
        $productLineTax1->setPercentage(2.0);
        $productLineTax2 = new LineTax();
        $productLineTax2->setName("Vat");
        $productLineTax2->setPercentage(4.0);
        $inventoryLineItem2->addKeyValue('Line_Tax', [$productLineTax1, $productLineTax2]);
        $record->addKeyValue("Quoted_Items", [$inventoryLineItem1, $inventoryLineItem2]);

         //line taxes
        $lineTax1 = new LineTax();
        $lineTax1->setName("Sales Tax");
        $lineTax1->setPercentage(2.0);
        $lineTax2 = new LineTax();
        $lineTax2->setName("Vat");
        $lineTax2->setPercentage(2.0);
        $record->addKeyValue('$line_tax', [$lineTax1, $lineTax2]);

        $bodyWrapper->setData([$record]);
        $headerInstance = new HeaderMap();
        $response = $recordOperations->createRecords($moduleAPIName, $bodyWrapper, $headerInstance);
 //Add your code to handle the response received in $response
 // For more details, see here.
    }
}

CreateRecords::initialize();
$moduleAPIName = "Quotes";
CreateRecords::createRecords($moduleAPIName);
?>

3. Events and Tasks Module Operations

3.1 Add and Update Participants in Events

There are two methods to add participants to an event. In the first method, use the record ID of the contact, lead or user. 

$participantVar = new Participants();
$participantVar->addKeyValue("participant", "record_id");
$participantVar->addKeyValue("type", "record_module");
$record->addFieldValue(Events::Participants(), [$participantVar]);

In the second method, mention the participant's email ID with the type key specified as email

$participantVar = new Participants();
$participantVar->setParticipant("name@domain.com");
$participantVar->setType("email");
$record->addFieldValue(Events::Participants(), [$participantVar]);

In the above code snippet, setParticipant() is a method used to assign a new value to the participant field. 

3.2 Reminder in Events

To create/update reminders for any event, use the following format. 

$reminderVar = date_create("YYYY-MM-DDThh:mm:ss.sssZ", new \DateTimeZone(date_default_timezone_get()));
$record->addFieldValue(Events::FieldName(), $reminderVar);

Here date_create() function is used to create the DateTime object with two parameters. The first parameter represents for the DateTime string and the following represents for the time zone

3.3. Reminder in Tasks

To create/update reminder for a task, use the following format.

$remindAtVar = new RemindAt();
$remindAtVar->setAlarm("ACTION=Value;TRIGGER=Condition;TRIGGER_TIME=hh:mm");
$record->addFieldValue(Tasks::FieldName(), $remindAtVar);

In the above code, the setAlarm() method is used to set the reminder properties. The multiple key-value pairs in the string argument denote the properties of your reminder. Following are the representation of keys for this field type.
  • ACTION - Specifies the notification type of the reminder.
  • TRIGGER - Defines the trigger condition that activates the reminder.
  • TRIGGER_TIME - Indicates the time at which the alarm should be triggered.
Refer to this document, to learn more about these key-value pairs and their possible values.

3.4 Recurring Activity in Events and Tasks

Use the following format to create a recurring event.

$recurringActivityVar = new RecurringActivity();
$recurringActivityVar->setRrule("FREQ=value;INTERVAL=value;BYMONTH=mm;BYMONTHDAY=dd;
DTSTART=yyyy-mm-dd;UNTIL=yyyy-mm-dd");
$record->addFieldValue(Module_API_Name::FieldName(), $recurringActivityVar);

Here, the setRrule() method is used to define the elements that determine the recurrence of the activity. This format is common for all the activity modules. To know more about the Rrule elements, refer to this post.

Below is a sample code to create an event using the above field types.

<?php

use com\zoho\crm\api\HeaderMap;
use com\zoho\crm\api\record\BodyWrapper;
use com\zoho\crm\api\record\Participants;
use com\zoho\crm\api\record\RecordOperations;
use com\zoho\crm\api\record\RecurringActivity;
use com\zoho\crm\api\record\Events;
use com\zoho\crm\api\record\Record;

require_once "vendor/autoload.php";

class CreateRecords
{
    public static function initialize()
    {
 // add initialisation code
 // refer to the previous post for details and examples 
    }

    public static function createRecords1(string $moduleAPIName)
    {
        $recordOperations = new RecordOperations();
        $BodyWrapper = new BodyWrapper();
        $record = new Record();
        $record->addFieldValue(Events::EventTitle(), "Test Events");
        $startdatetime = date_create("2023-05-16T23:03:06+05:30", new \DateTimeZone(date_default_timezone_get()));
        $record->addFieldValue(Events::StartDateTime(), $startdatetime);
        $enddatetime = date_create("2023-05-16T23:45:06+05:30", new \DateTimeZone(date_default_timezone_get()));
        $record->addFieldValue(Events::EndDateTime(), $enddatetime);

         //add participants 
        $participant1 = new Participants();
        $participant1->setParticipant("patricia.boyle@zylker.com");
        $participant1->setType("email");
        $participant2 = new Participants();
        $participant2->addKeyValue("participant", "5545974000002858122");
        $participant2->addKeyValue("type", "contact");
        $record->addFieldValue(Events::Participants(), [$participant1, $participant2]);

         //event reminder
        $remindAt = date_create("2023-05-16T21:00:06+05:30", new \DateTimeZone(date_default_timezone_get()));
        $record->addFieldValue(Events::RemindAt(), $remindAt);

         //recurring event
        $recurringActivity = new RecurringActivity();
        $recurringActivity->setRrule("FREQ=YEARLY;INTERVAL=1;BYMONTH=5;BYMONTHDAY=16;DTSTART=2023-05-16;UNTIL=2026-05-16");
        $record->addFieldValue(Events::RecurringActivity(), $recurringActivity);

        $BodyWrapper->setData([$record]);
        $headerInstance = new HeaderMap();
        $response = $recordOperations->createRecords($moduleAPIName, $BodyWrapper, $headerInstance);
 //Add your code to handle the response received in $response
 // For more details, see here.
    }
}

CreateRecords::initialize();
$moduleAPIName = "Events";
CreateRecords::createRecords1($moduleAPIName);
?>

Here is a sample code for creating a recurring task with a reminder.

<?php

use com\zoho\crm\api\HeaderMap;
use com\zoho\crm\api\record\BodyWrapper;
use com\zoho\crm\api\record\RecordOperations;
use com\zoho\crm\api\record\RecurringActivity;
use com\zoho\crm\api\record\RemindAt;
use com\zoho\crm\api\record\Tasks;
use com\zoho\crm\api\record\Record;

require_once "vendor/autoload.php";

class CreateRecords
{
    public static function initialize()
    {
 // add initialisation code
 // refer to the previous post for details and examples 
   }

    public static function createRecords1(string $moduleAPIName)
    {
        $recordOperations = new RecordOperations();
        $bodyWrapper = new BodyWrapper();
        $record = new Record();
        $record->addFieldValue(Tasks::Subject(), "Follow-up call");

         //task reminder
        $remindAt = new RemindAt();
        $remindAt->setAlarm("ACTION=EMAIL;TRIGGER=-P0D;TRIGGER_TIME=14:20");
        $record->addFieldValue(Tasks::RemindAt(), $remindAt);

         // recurring task
        $recurringActivity = new RecurringActivity();
        $recurringActivity->setRrule("FREQ=WEEKLY;INTERVAL=1;UNTIL=2023-06-01;BYDAY=TH;DTSTART=2023-06-01");
        $record->addFieldValue(Tasks::RecurringActivity(), $recurringActivity);

        $bodyWrapper->setData([$record]);
        $headerInstance = new HeaderMap();
        $response = $recordOperations->createRecords($moduleAPIName, $bodyWrapper, $headerInstance);
 //Add your code to handle the response received in $response
 // For more details, see here.
    }
}

CreateRecords::initialize();
$moduleAPIName = "Tasks";
CreateRecords::createRecords1($moduleAPIName);
?>

5. Send Email

You can either use an email or inventory template to send mail or write your own HTML/text body for the email. Refer to this sample code on GitHub to know how to fetch the inventory template IDs.  To use a template in your email follow the below structure.

$mail = new Mail();
$templateVar = new EmailTemplate();
$templateVar->setId(template_id);
$mail->setTemplate($templateVar);

Use the following format to write your own email body.

$mail = new Mail();
$mail->setContent("your_html_content");
$mail->setMailFormat("html");

To specify plain text as the value for the setContent() method, you have to set text as the value for the setMailFormat() method.

Here is a sample code of send mail using email template for your reference.

<?php

use com\zoho\crm\api\sendmail\SendMailOperations;
use com\zoho\crm\api\sendmail\Mail;
use com\zoho\crm\api\emailtemplates\EmailTemplate;
use com\zoho\crm\api\sendmail\BodyWrapper;
use com\zoho\crm\api\sendmail\UserAddress;
//use com\zoho\crm\api\inventorytemplates\InventoryTemplate;

require_once "vendor/autoload.php";

class SendMail
{
    public static function initialize()
    {
 // add initialisation code
 // refer to the previous post for details and examples 
   }

    public static function sendMail1(string $recordId, string $moduleAPIName)
    {
        $sendMailOperations = new SendMailOperations();
        $mail = new Mail();
        $from = new UserAddress();
        $from->setUserName("Patricia Boyle");
        $from->setEmail("patricia.boyle@zylker.com");
        $mail->setFrom($from);
        $to = new UserAddress();
        $to->setUserName("Carissa Kidman");
        $to->setEmail("carissa-kidman@yahoo.com");
        $mail->setTo([$to]);
        $mail->setSubject("Mail subject");

         //use this for customized email body
        //$mail->setContent("Hello! Thank you for shopping with us!");
        //$mail->setMailFormat("text");

         //use this for inventory template
        //$template = new InventoryTemplate();
        //$template->setId("55459741230768");
        //$mail->setTemplate($template);

        $template = new EmailTemplate();
        $template->setId("55459741230058");
        $mail->setTemplate($template);
        $mail->setConsentEmail(true);
        $wrapper = new BodyWrapper();
        $wrapper->setData([$mail]);
        $response = $sendMailOperations->sendMail($recordId, $moduleAPIName, $wrapper);
 //Add your code to handle the response received in $response
 // For more details, see here.
    }
}

SendMail::initialize();
$recordId = "5545974000002935001";
$moduleAPIName = "Contacts";
SendMail::sendMail1($recordId, $moduleAPIName);
?>

We hope you found this post useful and engaging! 

If you have any queries, feel free to drop them in the comments section below or reach out to us directly at support@zohocrm.com. We eagerly await your thoughts and feedback on this!

Keep an eye out for future posts packed with similar content!

Cheers!

Additional Reading


    • Recent Topics

    • Use Zoho to send sales receipts for Gocardless transactions

      I've been using gocardless for years and have d/d mandates set up on there. Each week we get bulk payments from customer d/d's. However, we need to send sales receipts to these customers. So I know I can sync mandates into Zoho, and then I can set up
    • Zoho - Gocardless sales receipts

      I've been using gocardless for years and have d/d mandates set up on there. Each week we get bulk payments from customer d/d's. However, we need to send sales receipts to these customers. So I know I can sync mandates into Zoho, and then I can set up
    • Introducing Rollup summary in Zoho CRM

      ------------------------------------------Moderated on 5th July'23---------------------------------------------- Rollup summary is now available for all organizations in all the DCs. Hello All, We hope you're well! We're here with an exciting update that
    • Introducing Connected Workflows in Zoho CRM for Everyone : Free Your Teams to Focus on What Matters

      Hello Everyone, We’re thrilled to introduce the next big evolution in Zoho CRM for Everyone -- Connected Workflows. This new feature builds on our commitment to deliver a CRM that’s truly inclusive, adaptable, and designed for consistent collaboration
    • Cooling-off Period Just Got Better: More Coverage, More Control

      We’ve enhanced the Cooling-off Period feature in Zoho Recruit to give you more control over repeat applications and referrals. This helps you maintain a cleaner, more efficient recruitment pipeline. With this enhancement, you can: Prevent duplicate candidate
    • Revenue Management: #7 Revenue Recognition in Construction & Real Estate Industry

      If you are in the construction or real estate business, you are used to long project timelines and progressive invoicing to keep up with your billing. But when does revenue get recognized? Will it happen when the contract gets signed? At different milestones
    • TikTok (and other social platform) Messages and comments of the past

      When I link a social channel, Zoho will show in "Inbox", "Messages" and "Contact" sections the interaction done in the past? (comment, messages...)
    • Restrict Employee mail deletion

      Dear Zoho, Is there a way where i can restrict my employees to delete any mails from their account
    • 554 5.1.8 Email Outgoing Blocked.

      Hi guys, I just singed up for mateusz.nowicki@zoho.com mail and I can't send any mails.. Why? Everytime I try to send something I got error like the one in the screenshot. Please, help me.
    • Zoho IP blocked by SpamHaus

      ERROR CODE :550 - 5.7.0 Your server IP address is in the SpamHaus SBL-XBL database, bye
    • File Upload in Creator's Subfrom

      Hello Sir/Madam, Here is a Problem......... Scenario: In CRM One Custom Module (Payments) have one File Upload Field now we have to Upload that File into Creator's Custom Form (Documents) have one Subform (Documents) in Document Upload Field using Deluge
    • Trigger workflow base on email clic

      Searching the help and forum, I see that there were workflow trigger rules based on email. But now, I can't find this type of trigger when I create a custom workflow. What I'm looking for would be to automate the sending of an email for a new prospect,
    • Bigin Form Acknowledgement

      How to troubleshoot and find out why form acknowledgement is not sending emails after form submission?
    • Zoho Mail POP & IMAP Server Details

      Hello all! We have been receiving a number of requests regarding the errors while configuring or using Zoho Mail account in POP/ IMAP clients. The server details vary based on your account type and the Datacenter in which your account is setup. Ensure
    • Ever since the new Android App udpates notifications are not working

      notifications are not working for the app is its closed I followed the tutuorial to the notificaction fixed and everythig seems to be right but notifications are not workig
    • Zoho Analytics & Zoho Desk - but not all desks

      I have several desks in our company and one of those is used by our HR department. I want to bring through the data to the shared Zoho Analytics workspace - except for the HR desk. Can this be excluded at data import stage ?
    • Incoming Emails Not Showing Up in Zoho Inbox

      Hi - I have my Zoho email account set up to forward a copy of all incoming emails to a secondary Gmail address, whilst retaining the original email in the Zoho inbox. However, all my incoming emails are currently not showing up in my Zoho inbox, so I'm
    • Unable to Create Zoho Booking via the Book Appointment API

      Its giving the below error {     "response": {         "errormessage": "Error setting value for the variable:customer_details\n null",         "status": "Error"     } } Request: POST Url: https://www.zohoapis.in/bookings/v1/json/appointment attached Zoho-oauthtoken
    • SHEET - Send email when a cell changes

      I would like to create a custom function for Zoho Sheet that triggers when a paticular cell changes to a specific value. This would result in sending an email to a recipient (this would be an address that remains the same and included in the script). Example: = IF(N4= "Drafted", <>EmailFunction) 1)     Cell N4 changes to "Drafted" 2)    Email is sent to recipient            or alternatively 3)    Post to chat channel I have found the Custom function editor in Sheet. I am not bad at scripting, but
    • 【開催報告】 福岡 ユーザー交流会 2025/8/8(金)

      皆さま、こんにちは。コミュニティチームの中野です。 8/8(金)に、福岡 ユーザー交流会を開催しました。 本投稿では、その様子をお届けします。当日の登壇資料などもこちらに共有しますので、参加できなかった皆さまもご参照ください。 今年初の開催となる福岡 ユーザー交流会では、CreativeStudio樂合同会社 前田さんによるZoho CRM / Sign / Survey の事例セッションのほか、 Zoho社員セッションでは、Zoho Forms の活用法を解説。 さらに、「見込み客・顧客データの管理/活用方法」をテーマに参加者同士でZoho
    • no me llegan los correos a Zoho mail

      No puedo recibir correos pero sí enviarlos, ya hice la modificación de MX y la verificación de teléfonos, qué es lo que ocurre? gracias
    • Error: Invalid login: 535 Authentication Failed

      I have used zoho with nodemailer. const transporter = nodemailer.createTransport({ host: 'smtp.zoho.com', port: 465, secure: true, auth: { user: 'example@example.com', pass: 'password' } }); While sending the mail, it shows the following error: Error:
    • Zoho Renewal

      Hello, If I am not going for zoho email renewal. will i get back my free zoho account? and if yes then is it possible to get back my all free user. how many user get back 10 or 25?
    • Not reciving emails

      Apparently i cannot recive emails on my adress contact@sportperformance.ro I can send, but do not recive. The mail i'm trying to send from mybother adress gets sent and doesn't bounce back... but still doesn't get in my inbox. Please advise
    • Not receiving MailChimp verification e-mail

      It seems that their verification e-mails are blocked. I can receive their other e-mails, but not their verification of domain ownership e-mail. I've checked and double checked how I typed the e-mail, using different e-mails (my personal e-mail can receive it), white listing the domain and all that is left is for the IP's to be white listed, but I don't have that power.  If a staff member could take a look at this -> http://mailchimp.com/about/ips/ And perhaps white list them for me, that would be
    • Creating my 2nd email account

      After creating my first email address, I decided to get another email address. I would like to use this new address as the primary address too. I don't know how to set it up there doesn't seem to be an option for that
    • Cannot - create more email account - Unusual activity detected from this IP. Please try again after some time

      Hello, I come across the error message in Control Panel. Unusual activity detected from this IP. Please try again after some time and i cannot create any more users We are an IT company and we provide service for another company Please unlock us.
    • "Unable to send message;Reason:553 Relaying disallowed. Invalid Domain"

      Good day. When I try to send mail through ZOHO mail I get the following error : "Unable to send message;Reason:553 Relaying disallowed. Invalid Domain" I need help with this. My zohomail is : @eclipseweb.site Thank you,
    • Transfert de domaine pour création des comptes emails

      Bonjour , je ne parviens point à créer des mails avec le domaine 'raeses.org' suite à la souscription du domaine auprès d'un autre hébergeur, dont j'ai fait la demande du code de transfert qui est le suivant : J2[U8-l0]p8[ En somme, attente de l'activation
    • Help! Unable to send message;Reason:554 5.1.8 Email Outgoing Blocked.

      Kindly help me resolved this issue that i am facing here.
    • How are people handling estimates with Zoho inventory?

      We are often using Zoho Books for estimates that then get converted to invoices within Books. We would like the sales team to migrate entirely to Zoho Inventory and no longer need to use Zoho Books so that they are only on one system. How are people managing
    • Relative Date Searches

      Currently in the search options, it has "date", "from date" and "to date". I think it would be great if there were options like "date greater than x days ago" and "date less than x days ago". I realise that as a once off you can just use the existing
    • Performance is degrading

      We have used Mail and Cliq for about three years now. I used to use both on the browser. Both have, over the past 6 months, had a severe degradation in performance. I switched to desktop email, which appeared to improve things somewhat, although initial
    • Ask the Experts 23: Customize, utilize, and personalize with Zoho Desk

      Hello everyone! It's time for the next round of Ask the Experts (ATE). This month is all about giving Zoho Desk a complete makeover and making it truly yours. Rebrand Zoho Desk with your organization’s details, customize ticket settings based on your
    • Dear Zoho CEO: Business Growth is about how you prioritise!

      All of us in business know that when you get your priorities right, your business grows. Zoho CRM and Zoho Books are excellent products, but sadly, Zoho Inventory continues to lag behind. Just this morning, I received yet another one-sided email about
    • Payroll In Canada

      Hi, When can we expect to have payroll in Canada with books 
    • Please review and re-enable outgoing emails for my domain

      Hello Zoho Support, I have recently purchased a new domain and set up email hosting with Zoho. However, my account shows "Outgoing Email Blocked". I am a genuine user and not sending bulk/spam emails. Please review and re-enable outgoing emails for my
    • Payroll without tax integrations (i.e. payroll for international)

      It seems as though Zoho waits to develop integrations with local tax authorities before offering Zoho Payroll to Zoho customers in a country. Please reconsider this approach. We are happy Zoho Books customers, but unhappy that we have to run payroll in
    • goingout e mail block

      info@ozanrade.com.tr
    • Incoming mails blocked

      Zoho User ID : 60005368884 My mail Id is marketing#axisformingtechnology.com .I am getting following message "Your Incoming has been blocked and the emails will not be fetched in your Zoho account and POP Accounts. Click here to get unblocked." Please
    • Next Page