<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: AndySqlman</title>
    <description>The latest articles on DEV Community by AndySqlman (@sqlman).</description>
    <link>https://dev.to/sqlman</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1758995%2Ff4c1e484-988b-4f14-bb4a-4bedbacb17b4.png</url>
      <title>DEV Community: AndySqlman</title>
      <link>https://dev.to/sqlman</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sqlman"/>
    <language>en</language>
    <item>
      <title>Adding Query Results Dynamically as Series in an Excel Chart</title>
      <dc:creator>AndySqlman</dc:creator>
      <pubDate>Fri, 03 Apr 2026 08:04:34 +0000</pubDate>
      <link>https://dev.to/sqlman/adding-query-results-dynamically-as-series-in-an-excel-chart-2dpd</link>
      <guid>https://dev.to/sqlman/adding-query-results-dynamically-as-series-in-an-excel-chart-2dpd</guid>
      <description>&lt;h3&gt;
  
  
  1. Overview
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Q: I have an annual statistics table. The number of rows in the table is uncertain; it may range from 2020 to 2023, or from 2020 to 2025. Now I want to add a chart to this table to display the yearly data. How can I dynamically add data rows to the chart?
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1y8q0ez9hmh9i8jomjf6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1y8q0ez9hmh9i8jomjf6.png" alt="Table data generated by SQL query" width="800" height="306"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;center&gt;Table data generated by SQL query&lt;/center&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff59gbp9iktyrb5um3rhn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff59gbp9iktyrb5um3rhn.png" alt="The chart effect I want to achieve (dynamically add a series to the chart for each data row)" width="800" height="463"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;center&gt;The chart effect I want to achieve (dynamically add a series to the chart for each data row)&lt;/center&gt;

&lt;h4&gt;
  
  
  A: SQLMessenger version 2.4 provides the function of "Adding queried data rows to the chart". You can use this function to dynamically add data to the chart.
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This function requires Microsoft Office (2010 or above) to be installed on your computer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tips:&lt;/strong&gt; We have configured a demo task according to your description, and you can see the running effect of the task through this demo task. &lt;a href="https://www.sqlmessenger.com/resource/(Demo)SalesReportWithChart.tsk" rel="noopener noreferrer"&gt;Click here&lt;/a&gt; to download the configuration file of the demo task. &lt;a href="https://www.sqlmessenger.com/manual/index.htm?page=27.htm#part3" rel="noopener noreferrer"&gt;Click here to learn how to use the downloaded task configuration file&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Configuration Steps
&lt;/h3&gt;

&lt;h4&gt;
  
  
  2.1 Design an Excel template. When designing the template, create a "Named Range" on the cell area to be filled. In this example, create a range named "SalesStatTable".
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb9iabpoe0bxym1ifsh6i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb9iabpoe0bxym1ifsh6i.png" alt="Create a named range in the table" width="800" height="442"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1&lt;/strong&gt;: Select cells A2 to M2 in Sheet1, and press the Ctrl+F3 shortcut to open the Name Manager.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvm02zn54qep6nmbrm2k3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvm02zn54qep6nmbrm2k3.png" alt="Select cells A2 to M2 in Sheet1, and press the Ctrl+F3 shortcut to open the Name Manager" width="800" height="211"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;center&gt;Create a named range in the table&lt;/center&gt;

&lt;p&gt;&lt;strong&gt;Step 2&lt;/strong&gt;: Click the New button.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyk80kvlz5mtff8s3vp1s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyk80kvlz5mtff8s3vp1s.png" alt="Click the New button" width="800" height="314"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3&lt;/strong&gt;: Enter a name for the named range, then click OK.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvovbmzlfxm3igwrn58b8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvovbmzlfxm3igwrn58b8.png" alt="Enter a name for the named range, then click OK" width="800" height="342"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Reference Document:  &lt;a href="https://www.sqlmessenger.com/manual/index.htm?page=31.1.8.htm" rel="noopener noreferrer"&gt;SQLMessenger User Manual - Using Custom Excel Templates&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  2.2 Add a chart to the template file. And add a series to the chart. In this example, the range of the series name is "=Sheet1!$A$2", and the range of the series values is "=Sheet1!$B$2:$M$2".
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr1zzt15h6j6h7l2tnp4g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr1zzt15h6j6h7l2tnp4g.png" alt="Add a chart to the template file" width="800" height="396"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;center&gt;Add a chart to the template file&lt;/center&gt;

&lt;p&gt;Reference Document: &lt;a href="https://www.sqlmessenger.com/manual/index.htm?page=31.1.8.htm#part2.3" rel="noopener noreferrer"&gt;SQLMessenger User Manual - Using "Named Range" for the Data Source in Charts&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  2.3 In SQLMessenger, create an attachment template, and import the template designed in the previous step into the system. Then add a query statement to the template.
&lt;/h4&gt;

&lt;p&gt;When setting the query statement, note that you need to select the Named Range created in step 1 in the "Named Range" option.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbk9uobjak2dv3kee84go.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbk9uobjak2dv3kee84go.png" alt="Select the corresponding " width="800" height="401"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;center&gt;Select the corresponding "Named Range" for the SQL query&lt;/center&gt;

&lt;p&gt;In addition, you also need to check the "Append as series at runtime" option in the "Other Options" of the SQL statement, and select the chart to be updated.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwvpz88bg3ynpigl80e1b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwvpz88bg3ynpigl80e1b.png" alt="Check the " width="800" height="381"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;center&gt;Check the "Append as series at runtime" option and select the chart to be updated&lt;/center&gt;

&lt;p&gt;Reference Document: &lt;a href="https://www.sqlmessenger.com/manual/index.htm?page=31.1.9.htm" rel="noopener noreferrer"&gt;SQLMessenger User Manual - Using SQL Query in Templates&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After completing the above settings, run the task. At this time, the system will automatically add the data rows queried by the SQL statement to the specified chart.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F01b0y1xgrbw2yfn17100.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F01b0y1xgrbw2yfn17100.png" alt="Execution Result 1: Statistical data from 2020 to 2022" width="800" height="448"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;center&gt;Execution Result 1: Statistical data from 2020 to 2022&lt;/center&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu14gaetxskocoxh3c4eb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu14gaetxskocoxh3c4eb.png" alt="Execution Result 2: Statistical data from 2020 to 2025" width="800" height="463"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;center&gt;Execution Result 2: Statistical data from 2020 to 2025&lt;/center&gt;

&lt;p&gt;Reference Documents:&lt;br&gt;
&lt;a href="https://www.sqlmessenger.com/manual/index.htm?page=31.1.9.htm" rel="noopener noreferrer"&gt;SQLMessenger User Manual - Using SQL Query in Templates&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.sqlmessenger.com/manual/index.htm?page=31.1.8.htm" rel="noopener noreferrer"&gt;SQLMessenger User Manual - Using Custom Excel Templates&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.sqlmessenger.com/manual/index.htm?page=31.1.8.htm#part2.3" rel="noopener noreferrer"&gt;SQLMessenger User Manual - Using "Named Range" for the Data Source in Charts&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Reposted from: &lt;a href="https://www.sqlmessenger.com/adding_query_results_dynamically_as_series_in_an_excel_chart" rel="noopener noreferrer"&gt;https://www.sqlmessenger.com/adding_query_results_dynamically_as_series_in_an_excel_chart&lt;/a&gt;&lt;/p&gt;

</description>
      <category>sqlmessenger</category>
      <category>sql</category>
      <category>excel</category>
      <category>database</category>
    </item>
    <item>
      <title>How to Get Technical Support for SQLMessenger</title>
      <dc:creator>AndySqlman</dc:creator>
      <pubDate>Wed, 01 Apr 2026 03:53:20 +0000</pubDate>
      <link>https://dev.to/sqlman/how-to-get-technical-support-for-sqlmessenger-41lg</link>
      <guid>https://dev.to/sqlman/how-to-get-technical-support-for-sqlmessenger-41lg</guid>
      <description>&lt;h3&gt;
  
  
  1. Our Services
&lt;/h3&gt;

&lt;p&gt;SQLMessenger is more than just a software product — it is a service we deliver to you as a team. If you encounter any issues related to SQLMessenger, Excel, VBA, other software, databases, data processing, or report distribution, please do not hesitate to contact us. We are here to help.&lt;br&gt;
If you are unsure about how to configure the product, simply share your requirements with us and we will handle the setup for you. You only need to be proficient in your own systems and business processes — leave the configuration of SQLMessenger to our team of experts.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. How to Get Technical Support
&lt;/h3&gt;

&lt;p&gt;If you encounter problems while using SQLMessenger, or if you need additional technical support, please contact us through the following methods.&lt;/p&gt;

&lt;h4&gt;
  
  
  Method 1 (Recommended): Submit a ticket via the Support Center in the SQLMessenger Customer Portal. Our team will reply to you as soon as possible, with a response time of no more than 1 business day.
&lt;/h4&gt;

&lt;p&gt;Step 1: Log in to the SQLMessenger Customer Portal. &lt;a href="https://www.sqlmessenger.com/docreader.html?id=522" rel="noopener noreferrer"&gt;Learn about SQLMessenger Customer Portal&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fit5va5jfmr2s3u714fur.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fit5va5jfmr2s3u714fur.png" alt="Log in to SQLMessenger Customer Portal" width="800" height="402"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Step 2: Click "Support Center", then click the "New Ticket" button.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftpf5z9f5ale8z0n6qh1c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftpf5z9f5ale8z0n6qh1c.png" alt="Click Support Center, then click the " width="800" height="289"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Step 3: Enter the problem you encountered or your requirements and submit. You can insert images or upload attachments here.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnmwffcum6af18y2msek8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnmwffcum6af18y2msek8.png" alt="Enter the problem you encountered or your requirements and submit" width="800" height="429"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Step 4: After our team replies to your ticket, the system will simultaneously send an email notification to the mailbox you set. The email address can be set in Account Settings of the Customer Portal.&lt;/p&gt;

&lt;h4&gt;
  
  
  Method 2: Leave us a message on the SQLMessenger official website. We will contact you via the email you left within one business day after receiving your message. &lt;a href="https://www.sqlmessenger.com/message-form.html" rel="noopener noreferrer"&gt;Click here&lt;/a&gt; to open the message page, or click the "Message" icon on any page to open the message page.
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi4undtdv9yeuujk9fg5h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi4undtdv9yeuujk9fg5h.png" alt="Click the message icon" width="800" height="429"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Method 3: Send us an email.
&lt;/h4&gt;

&lt;p&gt;Our email address: &lt;a href="mailto:support@sqlmessenger.com"&gt;support@sqlmessenger.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Reposted from &lt;a href="https://www.sqlmessenger.com/docreader.html?id=617" rel="noopener noreferrer"&gt;https://www.sqlmessenger.com/docreader.html?id=617&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How to Automatically Query and Send Branch-Specific Sales Performance Reports to Recipients Daily</title>
      <dc:creator>AndySqlman</dc:creator>
      <pubDate>Thu, 12 Mar 2026 09:39:29 +0000</pubDate>
      <link>https://dev.to/sqlman/how-to-automatically-query-and-send-branch-specific-sales-performance-reports-to-recipients-daily-1lfl</link>
      <guid>https://dev.to/sqlman/how-to-automatically-query-and-send-branch-specific-sales-performance-reports-to-recipients-daily-1lfl</guid>
      <description>&lt;p&gt;Reposted from: &lt;a href="https://www.sqlmessenger.com/automatically-query-send-branch-sales-performance-reports" rel="noopener noreferrer"&gt;https://www.sqlmessenger.com/automatically-query-send-branch-sales-performance-reports&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.sqlmessenger.com/automating-reports-with-sqlmessenger" rel="noopener noreferrer"&gt;https://www.sqlmessenger.com/automating-reports-with-sqlmessenger&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Overview
&lt;/h3&gt;

&lt;p&gt;Tired of manually compiling and distributing branch sales reports that take hours each day? This document details how to automatically query the sales performance reports of 20 branches every morning and send the reports individually to the recipients of each branch.&lt;/p&gt;

&lt;p&gt;Alex maintains an email list of branch managers, and each day he needs to query the sales performance report for every branch and send the reports individually to each respective branch manager.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvhoty1im02867eixkh4l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvhoty1im02867eixkh4l.png" alt="The reports Alex needs to send every day" width="800" height="557"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;center&gt;The reports Alex needs to send every day&lt;/center&gt;

&lt;h3&gt;
  
  
  1. Edit Recipient List
&lt;/h3&gt;

&lt;p&gt;Edit the recipient list in an Excel spreadsheet. The list includes the recipient's email address and the statistical ID of their branch.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0m5mj03liieqmp3oulnb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0m5mj03liieqmp3oulnb.png" alt="Recipient List" width="800" height="463"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;center&gt;Recipient List&lt;/center&gt;

&lt;p&gt;Tips:&lt;/p&gt;

&lt;p&gt;(1) The recipient list must be placed in the first sheet of the Excel spreadsheet, with the first row as the header row and rows 2 and below as data rows.&lt;/p&gt;

&lt;p&gt;(2) You can also save the recipient list in a database table and read it from this table when the task runs in the future.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Create a Report Task and Enable the "Information Distribute" Option
&lt;/h3&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Step 1&lt;/strong&gt; : Create a report task in SQLMessenger.
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxqqfjup5y4d8ea8qsx3f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxqqfjup5y4d8ea8qsx3f.png" alt="Create a report task in SQLMessenger" width="800" height="304"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Step 2&lt;/strong&gt; : Switch to the "Information Distribute" page, check "Create a subtask per recipient to query and send their information", then click the "Recipient List(Loop Data) Config" button.
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2z9aswfq4h6llwkrc85l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2z9aswfq4h6llwkrc85l.png" alt="Check " width="800" height="204"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Step 3&lt;/strong&gt; : Click "Select Data File", then select the recipient list file edited in Part 1.
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fza0agqajjqrxri9tpjpz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fza0agqajjqrxri9tpjpz.png" alt="Import recipient list" width="800" height="412"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;At this point, SQLMessenger will import the recipient list into the system and display the field list of the recipient table at the bottom of the interface.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9z874t3ckbil3e4bhldn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9z874t3ckbil3e4bhldn.png" alt="Field list of the recipient table" width="800" height="413"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Tips:&lt;/p&gt;

&lt;p&gt;After modifying the recipient table in the future, you must re-import the table here. You can also store the recipient list in a database.&lt;/p&gt;

&lt;p&gt;If storing the recipient list in a database, configure it according to the following steps:&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Step 1&lt;/strong&gt; : After opening the "Recipient List(Loop Data) Config" dialog box, select the data source where the recipient list is located, enter the SQL statement to query the recipient list, then click the "Test SQL" button. The system will run the SQL statement and retrieve the SQL field list.
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe8p6qyss147snr59ln7k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe8p6qyss147snr59ln7k.png" alt="Read recipient list from database" width="800" height="412"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Tips:&lt;/p&gt;

&lt;p&gt;(1) In the future, you only need to maintain the recipient list in the database.&lt;/p&gt;

&lt;p&gt;(2) For detailed information about data source configuration, please refer to &lt;a href="https://www.sqlmessenger.com/manual/7.htm" rel="noopener noreferrer"&gt;SQLMessenger User Manual - Data Source Management&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Before the task is fully tested, to avoid sending invalid emails accidentally during testing, you can check "Send task-generated emails and messages only after my approval", and uncheck this option after the task is tested successfully.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3i1qwdamx1j6og370zcr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3i1qwdamx1j6og370zcr.png" alt="Check " width="800" height="360"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;center&gt;Check "Send task-generated emails and messages only after my approval"&lt;/center&gt;

&lt;p&gt;For detailed explanation of "Send task-generated emails and messages only after my approval", please refer to &lt;a href="https://www.sqlmessenger.com/manual/22.htm" rel="noopener noreferrer"&gt;SQLMessenger User Manual - Message Review&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Set Email Body and Query Statement
&lt;/h3&gt;

&lt;p&gt;Set the query statement of the report in the task. Here we display the report in the body of the email.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Step 1&lt;/strong&gt; : Edit the email body template, right-click at the position where the statistical table is to be displayed in the body, then click "Insert SQL Table".
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo5s5cj0qvvg3jll84fsa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo5s5cj0qvvg3jll84fsa.png" alt="Insert SQL Table" width="800" height="401"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Step 2&lt;/strong&gt; : Select the report data source and enter the query statement.
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr6vx51iw548lvhn9qec5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr6vx51iw548lvhn9qec5.png" alt="Set report query statement" width="800" height="416"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: When setting the report query statement here, modify the query condition to use the "branch_id" field in the recipient list as the query condition.&lt;/p&gt;

&lt;p&gt;For example, the original query statement is as follows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT branch_id,
       stat_month,
       sales_amount    AS "Total Sales (USD)",
       order_quantity  AS "Order Count",
       new_customers   AS "New Customers",
       avg_order_value AS "Average Order Value (USD)"
FROM   us_branch_monthly_sales_stats
WHERE  branch_id = 'US001' --Branch ID to query
       AND stat_month = To_char(Now(), 'yyyymm') :: int4; 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When configuring in the task, modify the query condition after "branch_id" to &lt;strong&gt;branch_id = #[@@LoopData(branch_id)]#&lt;/strong&gt;, which means using the value of the branch_id field in the recipient list as the query condition. The modified query statement is as follows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT branch_id,
       stat_month,
       sales_amount    AS "Total Sales (USD)",
       order_quantity  AS "Order Count",
       new_customers   AS "New Customers",
       avg_order_value AS "Average Order Value (USD)"
FROM   us_branch_monthly_sales_stats
WHERE  branch_id = #[@@LoopData(branch_id)]# --Branch ID to query
       AND stat_month = To_char(Now(), 'yyyymm') :: int4; 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh9bv9qetpc8wpasqg388.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh9bv9qetpc8wpasqg388.png" alt="SQL statements before and after modification" width="800" height="348"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Step 3&lt;/strong&gt; : Click "Next", the system will run this statement and retrieve the SQL field list. After the SQL statement is executed, select the fields to be displayed in the body from the left list and add them to the right list. Then click "Next".
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqhzrlf1yflh4776xpxyf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqhzrlf1yflh4776xpxyf.png" alt="Select fields to display in the body" width="800" height="413"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Step 4&lt;/strong&gt; : Set the table style in the table designer, then click "Next".
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcx5bqerh2bmarkavf07v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcx5bqerh2bmarkavf07v.png" alt="Set table style in the table designer" width="800" height="413"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After the wizard is completed, a table placeholder icon will be displayed in the body. To modify the query statement or table format, double-click this icon to open the table editor.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flk9by2rgpcfvfbpo1ss1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flk9by2rgpcfvfbpo1ss1.png" alt="Table icon in the body" width="800" height="414"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Configure Recipients
&lt;/h3&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Step 1&lt;/strong&gt; : Click the button to the right of "SendTo" to open the "Select Recipients" dialog box.
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv9vd0oimcxjfyw12rn06.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv9vd0oimcxjfyw12rn06.png" alt="Open " width="800" height="304"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Step 2&lt;/strong&gt; : Click "Add From a Variable".
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F46032jq7tqyebcvqrlrc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F46032jq7tqyebcvqrlrc.png" alt="Click " width="800" height="254"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Step 3&lt;/strong&gt; : Switch to the "Variable/Function Comment" page, find "LoopData" and click the button to the right of this entry.
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft412o6royrwcqkm6ww22.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft412o6royrwcqkm6ww22.png" alt="Select system function @@LoopData" width="800" height="274"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Step 4&lt;/strong&gt; : Select "Recipient_Email" in "Field Name", which means using the "Recipient_Email" field in the recipient list as the recipient's email address. Then click "OK" to return to the task configuration interface.
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsgcxpwczavrkkp4dbjs1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsgcxpwczavrkkp4dbjs1.png" alt="Select " width="800" height="338"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6v2ej5ws4oyptwodui9v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6v2ej5ws4oyptwodui9v.png" alt="Configured " width="800" height="236"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;center&gt;Configured "SendTo"&lt;/center&gt;

&lt;h3&gt;
  
  
  5. Test the Task
&lt;/h3&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Step 1&lt;/strong&gt; : After configuring the task, click "Deploy" to make the new configuration take effect.
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbwgq0cjkg115fy23mh3k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbwgq0cjkg115fy23mh3k.png" alt="Deploy task configuration" width="800" height="455"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Step 2&lt;/strong&gt; : Right-click the task in the task list, then click "Run Selected Tasks Immediately".
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnstt4wdyl0v64tehys2t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnstt4wdyl0v64tehys2t.png" alt="Run the task" width="800" height="398"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;(1) Before testing the task, please check the task configuration to ensure that you have enabled the "Send task-generated emails and messages only after my approval" option for the task.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzciwnihv0rcdvnx1buhe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzciwnihv0rcdvnx1buhe.png" alt="Ensure " width="800" height="337"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;(2) You can also check "Do not send emails and messages generated by this task instance" when manually executing the task. This way, the system will not send the test emails generated by this task.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgd81po482e9zba378z79.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgd81po482e9zba378z79.png" alt="Check " width="800" height="455"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 3: After the task is completed, the system will generate a report email for each recipient. You can check whether the email content is consistent with expectations on the interface.
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvizdvl99syuys6f0toyu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvizdvl99syuys6f0toyu.png" alt="Check email content" width="800" height="455"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs0tr80r6res5c2jfepv3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs0tr80r6res5c2jfepv3.png" alt="The system generates an email for each recipient" width="800" height="414"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;center&gt;The system generates an email for each recipient&lt;/center&gt;

&lt;h3&gt;
  
  
  6. Set Execution Schedule for the Task
&lt;/h3&gt;

&lt;p&gt;After the task is tested successfully, you need to add an execution schedule for the task, and the system will automatically run the task according to the configuration of the execution schedule.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Step 1&lt;/strong&gt;: Right-click the task in the task list, then click "Edit Task Configuration".
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx9333vgb1te2qrn7xdm7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx9333vgb1te2qrn7xdm7.png" alt="Edit Task Configuration" width="800" height="344"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Step 2&lt;/strong&gt;: Switch to the "Task Schedules" page, then click the "Add New" button.
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flmerzyvr7p2yp4ew7sph.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flmerzyvr7p2yp4ew7sph.png" alt="Add new task schedule" width="800" height="236"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Step 3&lt;/strong&gt;: Set the start time and interval of the execution schedule, then click "OK".
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6r0zvz4owxqw2ed1r425.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6r0zvz4owxqw2ed1r425.png" alt="Task Schedule Configuration" width="800" height="269"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The configuration in the figure means running this task at 9 AM from Monday to Friday every week.&lt;/p&gt;

&lt;p&gt;Tips:&lt;/p&gt;

&lt;p&gt;(1) You can add multiple execution schedules for a task to run the task automatically at different times.&lt;/p&gt;

&lt;p&gt;(2) For detailed information about execution schedules, please refer to &lt;a href="https://www.sqlmessenger.com/manual/31.1.14.htm" rel="noopener noreferrer"&gt;SQLMessenger User Manual - Using Task Schedules&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you previously selected "Send task-generated emails and messages only after my approval", you can uncheck this option to achieve automatic email sending (no manual approval required).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fte6gprx7il7qt8d51xbx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fte6gprx7il7qt8d51xbx.png" alt="Uncheck " width="800" height="371"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Step 4&lt;/strong&gt;: After modifying the task, click "Deploy" to make the new configuration take effect.
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr9c247epr5nqu9px812z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr9c247epr5nqu9px812z.png" alt="Deploy new task configuration" width="800" height="455"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After the task is deployed, you can see the next run time of the task in the task list.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg9b6p12vliriap36ej3m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg9b6p12vliriap36ej3m.png" alt="The next run time of the task is displayed in the task list" width="800" height="351"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;center&gt;The next run time of the task is displayed in the task list&lt;/center&gt;

&lt;h3&gt;
  
  
  FAQ
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Can I add an Excel spreadsheet attachment to the task?
&lt;/h4&gt;

&lt;p&gt;Yes. When adding an attachment, you also need to modify the query condition of the SQL statement.&lt;/p&gt;

&lt;h4&gt;
  
  
  My report is not such a simple table but an Excel template designed by us. Can I make SQLMessenger generate reports in the format of my template?
&lt;/h4&gt;

&lt;p&gt;Yes. You can use the "Custom Attachment Template" to achieve this function. SQLMessenger can fill the SQL query results into the specified spreadsheet according to your configuration. For detailed methods, please refer to How to Auto-Fill SQL Query Results into a Custom Excel Template.&lt;/p&gt;

&lt;p&gt;I want the task to run at 9 AM and 5 PM every day. Can this be achieved?&lt;br&gt;
Yes. You can add multiple execution schedules for a task to run the task at different times.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftua0vf85uzhmfifr61k1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftua0vf85uzhmfifr61k1.png" alt="Run the task at different times" width="800" height="196"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;center&gt;Run the task at different times&lt;/center&gt;

</description>
      <category>sqlmessenger</category>
      <category>sql</category>
      <category>excel</category>
    </item>
    <item>
      <title>How to Auto-Fill SQL Query Results into a Custom Excel Template (MySQL/PostgreSQL/Oracle/SQL Server)</title>
      <dc:creator>AndySqlman</dc:creator>
      <pubDate>Tue, 10 Mar 2026 11:10:06 +0000</pubDate>
      <link>https://dev.to/sqlman/how-to-auto-fill-sql-query-results-into-a-custom-excel-template-mysqlpostgresqloraclesql-server-4nf0</link>
      <guid>https://dev.to/sqlman/how-to-auto-fill-sql-query-results-into-a-custom-excel-template-mysqlpostgresqloraclesql-server-4nf0</guid>
      <description>&lt;h3&gt;
  
  
  Overview
&lt;/h3&gt;

&lt;p&gt;This document details how to automatically populate the results of SQL queries into a custom Excel spreadsheet through simple configurations. It supports MySQL, PostgreSQL, Oracle, and SQL Server databases.&lt;/p&gt;

&lt;p&gt;We have a statistical table and need to execute two SQL queries, then populate the results into the table.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fef5fiushq5xr54xddggg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fef5fiushq5xr54xddggg.png" alt="The Excel spreadsheet we want to populate" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;center&gt;The Excel spreadsheet we want to populate&lt;/center&gt;

&lt;h3&gt;
  
  
  1. Design Template Spreadsheet
&lt;/h3&gt;

&lt;p&gt;Remove the existing data in the Excel spreadsheet and add data cell markers in the positions where data needs to be populated.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frp1o8vlox4kbfpzucpeh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frp1o8vlox4kbfpzucpeh.png" alt="Add data cell markers in the template" width="800" height="264"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;center&gt;Add data cell markers in the template&lt;/center&gt;

&lt;p&gt;&lt;strong&gt;Tips:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;(1) The format of a data cell is "&amp;lt;%Data Cell Name%&amp;gt;", for example, "&amp;lt;%Total_Revenue%&amp;gt;".&lt;/p&gt;

&lt;p&gt;(2) For ease of subsequent configuration, it is recommended that the data cell names be consistent with the SQL field names.&lt;/p&gt;

&lt;p&gt;(3) You can use Excel formulas to quickly generate data cell markers, such as ="&amp;lt;%"&amp;amp;B15&amp;amp;"%&amp;gt;".&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fquv6c5esx5skm77yoq9g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fquv6c5esx5skm77yoq9g.png" alt="Quickly generate data cell markers using Excel formulas" width="800" height="366"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;center&gt;Quickly generate data cell markers using Excel formulas&lt;/center&gt;

&lt;p&gt;For detailed design methods of custom templates, please refer to &lt;a href="https://www.sqlmessenger.com/manual/31.1.8.htm#part2" rel="noopener noreferrer"&gt;Designing Custom Excel Templates&lt;/a&gt;, &lt;a href="https://www.sqlmessenger.com/manual/31.1.8.htm#part2.1" rel="noopener noreferrer"&gt;Using Data Cells&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Configure Attachment Template
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Step 1&lt;/strong&gt;: Add an attachment template in the task configuration dialog of SQLMessenger.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl0apso54wv1hm2lyuigz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl0apso54wv1hm2lyuigz.png" alt="Add an attachment template in the task configuration dialog of SQLMessenger" width="800" height="348"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2&lt;/strong&gt;: Select "Customize Spreadsheet Template" as the template type, then click the "Select File" button to import the template spreadsheet designed in the previous step into the system.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjo71mpnenbdfjeeg18gn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjo71mpnenbdfjeeg18gn.png" alt="Select " width="800" height="272"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3&lt;/strong&gt;: Click the "New Query" button to add the first query statement to the template.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcxzk8kgm55egaf45cgsa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcxzk8kgm55egaf45cgsa.png" alt="Click the " width="800" height="310"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4&lt;/strong&gt;: Select the data source, enter the query statement, then click "Next". The system will execute the SQL statement you entered to retrieve information about the SQL fields.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpxd79qpx178yyoani81v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpxd79qpx178yyoani81v.png" alt="Select the data source, enter the query statement, then click " width="800" height="409"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Tip: You can use variables in the SQL statement to dynamically determine query conditions. For detailed information, please refer to Using &lt;a href="https://www.sqlmessenger.com/manual/31.1.6.htm#part3" rel="noopener noreferrer"&gt;Variables in SQL Statements&lt;/a&gt;, &lt;a href="https://www.sqlmessenger.com/manual/31.1.5.htm" rel="noopener noreferrer"&gt;Using Variables in Tasks&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5&lt;/strong&gt;: Set the mapping relationship between SQL fields and data cells. You can select all SQL fields, then click the "Auto Relate Fields and Cells" button to quickly set the mapping relationship between SQL fields and data cells.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwr3k6dngik1zzgi8d1wl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwr3k6dngik1zzgi8d1wl.png" alt="Set the mapping relationship between SQL fields and data cells" width="800" height="408"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffi87lye0s1uizzv57k3i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffi87lye0s1uizzv57k3i.png" alt=" " width="800" height="275"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 6&lt;/strong&gt;: Click "Next Step", then click "Finish" to close this wizard.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 7&lt;/strong&gt;: Repeat the above steps to add the second query statement.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftmfav8x1avu2ciix89cc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftmfav8x1avu2ciix89cc.png" alt=" " width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2vntl7vohkzr5x270tzm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2vntl7vohkzr5x270tzm.png" alt="List of configured SQL statements" width="800" height="336"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;center&gt;List of configured SQL statements&lt;/center&gt;

&lt;p&gt;Next, we can click the "Preview" button to view the running effect of the template.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftml8taxlq74p5n2d8afa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftml8taxlq74p5n2d8afa.png" alt="Click " width="800" height="453"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdubklj946v8l8inytb6v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdubklj946v8l8inytb6v.png" alt="Spreadsheet generated after task execution" width="800" height="360"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  FAQ
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Can I use Excel formulas in custom Excel templates?
&lt;/h4&gt;

&lt;p&gt;Yes. Note that when using formulas such as SUM, you need to modify the formula parameters to use Named Range as the formula parameters. For detailed information, please refer to Using "Named Range" in Formulas.&lt;/p&gt;

&lt;h4&gt;
  
  
  Can I use charts in custom Excel templates?
&lt;/h4&gt;

&lt;p&gt;Yes. Note that you need to modify the series values of the chart to use Named Range as the source of the series values. For detailed information, please refer to Using "Named Range" for the Data Source in Charts.&lt;/p&gt;

&lt;h4&gt;
  
  
  Why are the formula columns in the generated spreadsheet blank after task execution?
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuv6dlzi24y7hn23tefv7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuv6dlzi24y7hn23tefv7.png" alt=" " width="800" height="439"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When processing such spreadsheets, you need to use Named Range to expand the entire area as a whole to avoid blank formula columns. For detailed information, please refer to &lt;a href="https://www.sqlmessenger.com/manual/31.1.8.htm#part2.4" rel="noopener noreferrer"&gt;Use "Named Range" to Expand Cell Blocks&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Reposted from &lt;a href="https://www.sqlmessenger.com/how-to-auto-fill-sql-results-to-custom-excel-template" rel="noopener noreferrer"&gt;https://www.sqlmessenger.com/how-to-auto-fill-sql-results-to-custom-excel-template&lt;/a&gt;&lt;/p&gt;

</description>
      <category>sql</category>
      <category>sqlmessenger</category>
      <category>excel</category>
    </item>
    <item>
      <title>How to Send Telegram Bot Messages from a Database Using SQL</title>
      <dc:creator>AndySqlman</dc:creator>
      <pubDate>Wed, 25 Feb 2026 08:36:29 +0000</pubDate>
      <link>https://dev.to/sqlman/how-to-send-telegram-bot-messages-from-a-database-using-sql-3781</link>
      <guid>https://dev.to/sqlman/how-to-send-telegram-bot-messages-from-a-database-using-sql-3781</guid>
      <description>&lt;p&gt;Databases aren’t just for storing data—they can also drive real-time notifications. For example, you might want to push updates to a Telegram user, group, or channel whenever a record changes. Traditionally, this requires writing API integration code in your application.&lt;br&gt;
﻿&lt;br&gt;
With SQLMessenger and its SQLTelebot plugin, there’s a simpler way. SQLMessenger runs as a background service and monitors a dedicated database table. When a new record appears, SQLTelebot automatically sends it through the Telegram Bot API—text, images, or files.&lt;br&gt;
﻿&lt;br&gt;
All it takes is a single SQL INSERT statement to trigger a message. This works with PostgreSQL, SQL Server, MySQL, or Oracle, providing a straightforward and reliable way to connect your database to Telegram. For anyone building alerts, notifications, or workflow updates, this approach keeps things simple without adding extra code in the application layer.&lt;/p&gt;
&lt;h3&gt;
  
  
  Supported Databases
&lt;/h3&gt;

&lt;p&gt;SQLTelebot supports sending Telegram messages from the following databases:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SQL Server (2005 or higher)&lt;/li&gt;
&lt;li&gt;Oracle (11g or higher)&lt;/li&gt;
&lt;li&gt;MySQL (version 5.7.26 or higher)&lt;/li&gt;
&lt;li&gt;PostgreSQL (version 9.0 or higher)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;SQLTelebot supports sending text messages, images, and files.&lt;/p&gt;
&lt;h3&gt;
  
  
  Common Use Cases for Database-to-Telegram Automation
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Sending Telegram alerts from SQL Server&lt;/li&gt;
&lt;li&gt;Triggering Telegram notifications from PostgreSQL&lt;/li&gt;
&lt;li&gt;Sending automated reports to Telegram groups&lt;/li&gt;
&lt;li&gt;Database-driven Telegram Bot automation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This document demonstrates how to send Telegram messages from a PostgreSQL database.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: Before getting started with SQLTelebot, ensure you have completed the following:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Install the SQLTelebot plugin in SQLMessenger. &lt;a href="https://www.sqlmessenger.com/manual/plugin-2-install.htm" rel="noopener noreferrer"&gt;View details&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Create a bot in Telegram. &lt;a href="https://www.sqlmessenger.com/manual/plugin-2-bot-config.htm#part1" rel="noopener noreferrer"&gt;View details&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Add your database to SQLMessenger’s Data Source list. &lt;a href="https://www.sqlmessenger.com/manual/7.htm#part1" rel="noopener noreferrer"&gt;View details&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;
  
  
  1. Creating Interface Tables in your Database
&lt;/h2&gt;

&lt;p&gt;First, download the script for your database type, then run the script in your database to create the interface tables (telebot_send_message and telebot_send_message_h).&lt;/p&gt;

&lt;p&gt;Download link: &lt;a href="https://www.sqlmessenger.com/manual/plugin-2-interface-table-config.htm#part2" rel="noopener noreferrer"&gt;https://www.sqlmessenger.com/manual/plugin-2-interface-table-config.htm#part2&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fweuvyee1fg48d9uq0dck.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fweuvyee1fg48d9uq0dck.png" alt="Create the interface tables in your database" width="800" height="488"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;center&gt;Create the interface tables in your database&lt;/center&gt;

&lt;p&gt;&lt;a href="https://www.sqlmessenger.com/manual/plugin-2-interface-table-config.htm#part4" rel="noopener noreferrer"&gt;Click here to view detailed explanation of telebot_send_message and telebot_send_message_h&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  2. Configuring Database Monitoring in SQLTelebot
&lt;/h2&gt;

&lt;p&gt;After the interface tables have been created, add your database to the SQLTelebot monitoring list.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3h60hqwl6kq0tfzaqdqi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3h60hqwl6kq0tfzaqdqi.png" alt="Add the database to the SQLTelebot monitoring list" width="800" height="451"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;center&gt;Add the database to the SQLTelebot monitoring list&lt;/center&gt;

&lt;p&gt;Once configured, SQLTelebot will periodically read the telebot_send_message table based on the Polling Interval setting. If new records are found, SQLTelebot will add them to the Outgoing Messages list and send them to the specified Telegram contacts.&lt;/p&gt;
&lt;h2&gt;
  
  
  3. Sending Telegram Messages Using SQL Statements
&lt;/h2&gt;

&lt;p&gt;After SQLTelebot is properly configured, you can insert messages into the telebot_send_message table using SQL statements. SQLTelebot will send the inserted records to the corresponding Telegram recipients.&lt;/p&gt;
&lt;h3&gt;
  
  
  3.1 Sending Text Messages
&lt;/h3&gt;

&lt;p&gt;The following SQL statement sends a text message to a Telegram group.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;INSERT INTO
    telebot_send_message (bot_id, chat_id, message_text)
VALUES
    (
        7898095120,        -- Your Telegram Bot ID
        '-1002546050440',  -- The group Chat ID. To send messages to a channel, you can use the channel username, e.g., "@mychannel"
        'Alert: Server 1 disk space critical - requires immediate maintenance.' -- The message content to be sent
    );
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Below is the message received in Telegram.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2t82u29w8709n460nobe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2t82u29w8709n460nobe.png" alt="Telegram message sent from PostgreSQL using SQL statement" width="800" height="393"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;center&gt;Telegram message sent from PostgreSQL using SQL statement&lt;/center&gt;

&lt;h3&gt;
  
  
  3.2 Sending Images
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: For security reasons, any image file you plan to send must be copied in advance to the userfiles folder (or any of its subfolders) under the SQLMessenger installation directory.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdnqb55xvpugybm4z5ox2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdnqb55xvpugybm4z5ox2.png" alt="The files that you plan to send must be copied in advance to the userfiles folder" width="800" height="419"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;center&gt;The files that you plan to send must be copied in advance to the userfiles folder&lt;/center&gt;

&lt;p&gt;The following SQL statement sends an image to a Telegram group. Note that the message_type field must be set to "photo", and attach_file_name must contain the full file path of the image.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;INSERT INTO telebot_send_message
            (bot_id,
             chat_id,
             message_type,
             message_text,
             attach_file_name)
VALUES      (
--Bot ID for sending the message. Found in "Bot Configuration".
7898095120,
--Target chat ID (private or group). Found in "Chat List". For channels, use the username (e.g., "@testchannel9012001").
--To send a message to a channel, you can enter the channel's username (including the "@" symbol) in the chat_id field, e.g., "@testchannel9012001".
'5352535507',
--Message type: Use 'document' for a file or 'photo' for an image.
'photo',
-- Optional caption displayed with the photo or file in Telegram.
'This is a photo I took during my trip in Canada',
-- The full path of the file to be sent.
'C:\SQLMessenger\userfiles\myphoto\StockSnap_QMXZFZZ6WM.jpeg' ); 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftxqdgnujz9s27xgbr1ga.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftxqdgnujz9s27xgbr1ga.png" alt="The photo received in Telegram" width="800" height="419"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;center&gt;The photo received in Telegram&lt;/center&gt;

&lt;h3&gt;
  
  
  3.3 Sending Files
&lt;/h3&gt;

&lt;p&gt;The following SQL statement sends a file to a Telegram group. Note that the message_type field must be set to "document", and attach_file_name must contain the full file path of the file. (As with images, the file must first be copied to the userfiles folder under the SQLMessenger installation directory or one of its subfolders.)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;INSERT INTO telebot_send_message
            (bot_id,
             chat_id,
             message_type,
             message_text,
             attach_file_name)
VALUES      (
--Bot ID for sending the message. Found in "Bot Configuration".
7898095120,
--Target chat ID (private or group). Found in "Chat List". For channels, use the username (e.g., "@testchannel9012001").
--To send a message to a channel, you can enter the channel's username (including the "@" symbol) in the chat_id field, e.g., "@testchannel9012001".
'5352535507',
--Message type: Use 'document' for a file or 'photo' for an image.
'document',
-- Optional caption displayed with the photo or file in Telegram.
'This is the sales performance report for Emma for November 2025.',
-- The full path of the file to be sent.
'C:\SQLMessenger\userfiles\report202511(Emma).xlsx' ); 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqx3htu8hl9xutot1xd3a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqx3htu8hl9xutot1xd3a.png" alt="The file must be placed in the userfiles folder under the SQLMessenger installation directory" width="800" height="425"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;center&gt;The file must be placed in the userfiles folder under the SQLMessenger installation directory&lt;/center&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3d74odh5bv171ackitu3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3d74odh5bv171ackitu3.png" alt="The file received in Telegram" width="800" height="419"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;center&gt;The file received in Telegram&lt;/center&gt;

&lt;h3&gt;
  
  
  3.4 Tracking Message Delivery Status
&lt;/h3&gt;

&lt;p&gt;After SQLTelebot sends a message, it updates the state field in table telebot_send_message , and then moves the message record from telebot_send_message to telebot_send_message_h.&lt;/p&gt;

&lt;p&gt;You can check the delivery result by querying the state and status_desc fields in the telebot_send_message_h table. For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT state,
       status_desc
FROM   telebot_send_message_h
WHERE  message_id = YourMessageID; 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The state field indicates the message delivery status. Possible values include:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;W&lt;/strong&gt;&lt;/em&gt;: Waiting to be processed. SQLTelebot has not yet read this record.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;T&lt;/strong&gt;&lt;/em&gt;: SQLTelebot has read this record and is currently processing it.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;F&lt;/strong&gt;&lt;/em&gt;: Failed to send. The status_desc field contains the reason for the failure.&lt;/p&gt;

&lt;p&gt;For detailed information about telebot_send_message and telebot_send_message_h, please visit: &lt;a href="https://www.sqlmessenger.com/manual/plugin-2-interface-table-config.htm#part4" rel="noopener noreferrer"&gt;https://www.sqlmessenger.com/manual/plugin-2-interface-table-config.htm#part4&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Can I send Telegram messages directly from SQL Server without writing API code?
&lt;/h3&gt;

&lt;p&gt;Yes. By using SQLMessenger together with the SQLTelebot plugin, you can send Telegram messages using standard SQL INSERT statements into an interface table. There is no need to manually implement Telegram Bot API calls in your application code.&lt;/p&gt;

&lt;p&gt;This approach simplifies Telegram integration for database administrators and SQL developers.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does this solution work with PostgreSQL, MySQL, and Oracle?
&lt;/h3&gt;

&lt;p&gt;Yes. SQLMessenger supports multiple relational database systems including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SQL Server&lt;/li&gt;
&lt;li&gt;PostgreSQL&lt;/li&gt;
&lt;li&gt;MySQL&lt;/li&gt;
&lt;li&gt;Oracle
The Telegram message sending mechanism works the same way across all supported databases: insert a record into the monitoring table, and SQLTelebot delivers the message automatically.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  How does the database-to-Telegram integration actually work?
&lt;/h3&gt;

&lt;p&gt;The architecture is based on a monitoring mechanism:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A database table acts as a message queue.&lt;/li&gt;
&lt;li&gt;SQLMessenger monitors the table in real time.&lt;/li&gt;
&lt;li&gt;When a new record is inserted, SQLTelebot sends the message through the Telegram Bot API.&lt;/li&gt;
&lt;li&gt;Delivery status is written back to the database.
This creates a clean separation between database logic and external messaging services.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Can I send images or files to Telegram from SQL?
&lt;/h3&gt;

&lt;p&gt;Yes. SQLTelebot supports:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Text messages&lt;/li&gt;
&lt;li&gt;Images&lt;/li&gt;
&lt;li&gt;Files (such as PDF reports, Excel documents, or log files)
You can store the file path or reference inside the interface table, and the plugin will handle file transmission automatically.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Is it possible to send automated Telegram alerts based on database triggers?
&lt;/h3&gt;

&lt;p&gt;Yes. You can configure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SQL triggers&lt;/li&gt;
&lt;li&gt;Scheduled jobs&lt;/li&gt;
&lt;li&gt;Stored procedures&lt;/li&gt;
&lt;li&gt;Monitoring scripts
Whenever a specific event occurs (for example, an error log entry or threshold breach), the system can automatically insert a message into the interface table and trigger a Telegram notification.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Is this solution secure?
&lt;/h3&gt;

&lt;p&gt;Yes. The Telegram Bot Token is configured within the SQLTelebot plugin settings and is not exposed in SQL scripts. Database access control mechanisms remain fully enforced.&lt;/p&gt;

&lt;p&gt;For additional security, you can:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Restrict table access permissions&lt;/li&gt;
&lt;li&gt;Use encrypted database connections&lt;/li&gt;
&lt;li&gt;Limit bot access to specific chat IDs&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Can I track whether the Telegram message was successfully delivered?
&lt;/h3&gt;

&lt;p&gt;Yes. After sending the message, SQLTelebot updates the status column in the interface table. You can track:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sent&lt;/li&gt;
&lt;li&gt;Failed&lt;/li&gt;
&lt;li&gt;Error message&lt;/li&gt;
&lt;li&gt;Telegram response ID
This allows you to build reliable audit logging and monitoring systems.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  What are common real-world use cases for sending Telegram messages from a database?
&lt;/h3&gt;

&lt;p&gt;Typical scenarios include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;System error alerts&lt;/li&gt;
&lt;li&gt;Monitoring notifications&lt;/li&gt;
&lt;li&gt;Financial transaction confirmations&lt;/li&gt;
&lt;li&gt;Daily report distribution&lt;/li&gt;
&lt;li&gt;Industrial automation alerts&lt;/li&gt;
&lt;li&gt;DevOps monitoring notifications
This makes the solution suitable for IT operations, enterprise systems, and data-driven automation environments.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Why use SQLMessenger instead of directly calling the Telegram Bot API?
&lt;/h3&gt;

&lt;p&gt;Direct API integration requires custom development, background processing logic, retry handling, and error management.&lt;/p&gt;

&lt;p&gt;Using SQLMessenger and SQLTelebot provides a ready-to-use integration layer that separates database logic from external API communication, reducing development effort and improving maintainability.&lt;/p&gt;

&lt;p&gt;Reposted from &lt;a href="https://www.sqlmessenger.com/sql-to-telegram" rel="noopener noreferrer"&gt;https://www.sqlmessenger.com/sql-to-telegram&lt;/a&gt;&lt;/p&gt;

</description>
      <category>sqlmessenger</category>
      <category>telegram</category>
      <category>sql</category>
    </item>
    <item>
      <title>Excel: How to Send Multiple Rows Per Email (Grouped Automatically)</title>
      <dc:creator>AndySqlman</dc:creator>
      <pubDate>Wed, 25 Feb 2026 02:55:00 +0000</pubDate>
      <link>https://dev.to/sqlman/excel-how-to-send-multiple-rows-per-email-grouped-automatically-2362</link>
      <guid>https://dev.to/sqlman/excel-how-to-send-multiple-rows-per-email-grouped-automatically-2362</guid>
      <description>&lt;p&gt;Many Excel users eventually run into this limitation:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;How do I send multiple rows per email from Excel — grouped by recipient?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;By default, Excel and traditional mail merge tools send one row per email. But in real-world workflows, that’s often not enough.&lt;/p&gt;

&lt;p&gt;Let’s walk through a practical scenario and explore how to solve it properly.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem: Sending Grouped Emails Manually Every Day
&lt;/h2&gt;

&lt;p&gt;Lily Summers is a teaching assistant at a college.&lt;/p&gt;

&lt;p&gt;Every morning, she receives an Excel file containing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Column A: Student names&lt;/li&gt;
&lt;li&gt;Columns B–J: Attendance details&lt;/li&gt;
&lt;li&gt;Column K: Instructor names
Her task sounds simple:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sort 250 absent students by instructor.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Take a screenshot of each instructor’s student list.&lt;/li&gt;
&lt;li&gt;Paste the screenshot into an email.&lt;/li&gt;
&lt;li&gt;Add a standard message.&lt;/li&gt;
&lt;li&gt;Send the email.
Repeat this process over 40 times.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4hvu0efjkwgjcqbrzgrc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4hvu0efjkwgjcqbrzgrc.png" alt="Daily student attendance sheet received by Lily(sample data)" width="800" height="436"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;center&gt;Daily student attendance sheet received by Lily(sample data)&lt;/center&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F96i3kdida5jkj0nwxs4h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F96i3kdida5jkj0nwxs4h.png" alt="Emails to be sent by Lily" width="800" height="383"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;center&gt;Emails to be sent by Lily&lt;/center&gt;

&lt;p&gt;The entire workflow takes &lt;strong&gt;90 minutes per day&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The key issue is this:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;She needs to send multiple students (multiple rows) in one email to each instructor — not one row per email.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;And the list must be sent as an image, not as an attachment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Standard Mail Merge Doesn’t Work
&lt;/h2&gt;

&lt;p&gt;Most tutorials explain how to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Send one row per email&lt;/li&gt;
&lt;li&gt;Use Word mail merge&lt;/li&gt;
&lt;li&gt;Insert single-record data fields
However, these methods do not solve the grouped email problem.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Mail merge does not:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Automatically group multiple rows by recipient&lt;/li&gt;
&lt;li&gt;Create one email per group&lt;/li&gt;
&lt;li&gt;Convert a dynamic Excel range into an image&lt;/li&gt;
&lt;li&gt;Embed that image directly into the email body
So while mail merge works for simple notifications, it does not support sending multiple rows in one email grouped by a specific column.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What Actually Needs to Happen
&lt;/h2&gt;

&lt;p&gt;To send multiple rows per email from Excel correctly, the workflow must include:&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Group Rows by Recipient
&lt;/h3&gt;

&lt;p&gt;All rows sharing the same instructor name must be grouped together.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Generate a Separate Report per Group
&lt;/h3&gt;

&lt;p&gt;Each instructor should receive only their students.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3: Convert the Grouped Range into an Image
&lt;/h3&gt;

&lt;p&gt;Since the requirement is to send the list as an image, the system must capture the grouped table and convert it into an image format while preserving formatting.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4: Insert the Image into the Email Body
&lt;/h3&gt;

&lt;p&gt;The image must be embedded inline — not sent as an attachment.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 5: Send Automatically
&lt;/h3&gt;

&lt;p&gt;Generate and send one email per instructor without manual repetition.&lt;/p&gt;

&lt;p&gt;This is not a simple mail merge — this is a &lt;strong&gt;grouped reporting automation workflow&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Can This Be Done with VBA?
&lt;/h2&gt;

&lt;p&gt;Technically, yes — but it requires:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Writing grouping logic&lt;/li&gt;
&lt;li&gt;Creating dynamic ranges&lt;/li&gt;
&lt;li&gt;Converting ranges to images&lt;/li&gt;
&lt;li&gt;Handling Outlook or SMTP integration&lt;/li&gt;
&lt;li&gt;Managing error handling&lt;/li&gt;
&lt;li&gt;Maintaining the script long-term
For non-developers, this becomes complex quickly.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  A Practical Automation Workflow
&lt;/h2&gt;

&lt;p&gt;In Lily’s case, we implemented the following workflow in SQLMessenger through straightforward configuration:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Importing Excel data&lt;/li&gt;
&lt;li&gt;Grouping records by a specified column&lt;/li&gt;
&lt;li&gt;Generating grouped reports&lt;/li&gt;
&lt;li&gt;Converting reports to images&lt;/li&gt;
&lt;li&gt;Creating draft emails automatically&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fql2nbe6dmcraef5t418j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fql2nbe6dmcraef5t418j.png" alt="The email task configured in SQLMessenger" width="800" height="397"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;center&gt;The email task configured in SQLMessenger&lt;/center&gt;

&lt;p&gt;Each day, she simply:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Imports the student list.&lt;/li&gt;
&lt;li&gt;Executes the predefined task.&lt;/li&gt;
&lt;li&gt;Reviews the generated draft emails.&lt;/li&gt;
&lt;li&gt;Clicks “Approve.”&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F57c8mqjdccor5c15o6q2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F57c8mqjdccor5c15o6q2.png" alt="Run the task and import the student list" width="800" height="396"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;center&gt;Run the task and import the student list&lt;/center&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff09t9kvqjsxson7nqx57.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff09t9kvqjsxson7nqx57.png" alt="Emails generated by the task (email bodies sent as images)" width="800" height="383"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;center&gt;Emails generated by the task (email bodies sent as images)&lt;/center&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy2n1puqxnbkig0bncrbm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy2n1puqxnbkig0bncrbm.png" alt="After clicking " width="800" height="384"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;center&gt;After clicking "Approve" in the interface, the system automatically starts sending the generated emails&lt;/center&gt;

&lt;p&gt;What used to take 90 minutes now takes about five.&lt;/p&gt;

&lt;p&gt;The key insight: solving this problem requires data grouping + report generation + automated email creation.&lt;/p&gt;

&lt;h2&gt;
  
  
  When Do You Need This Type of Workflow?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Sending attendance reports by instructor&lt;/li&gt;
&lt;li&gt;Sending sales reports by regional manager&lt;/li&gt;
&lt;li&gt;Sending support tickets by team lead&lt;/li&gt;
&lt;li&gt;Sending financial summaries by department&lt;/li&gt;
&lt;li&gt;Sending grouped order lists by supplier&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If your current process involves filtering data manually, taking screenshots, and repeating emails dozens of times, you are performing grouped reporting manually — which can be automated.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Can Excel send multiple rows in one email?
&lt;/h3&gt;

&lt;p&gt;No. By default, Excel mail merge sends one row per email. To send multiple rows to the same recipient, the data must first be grouped.&lt;/p&gt;

&lt;h3&gt;
  
  
  How do I send grouped records from Excel automatically?
&lt;/h3&gt;

&lt;p&gt;You must group rows by recipient, generate a report per group, and then send one email per group automatically.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I send an Excel table as an image in an email?
&lt;/h3&gt;

&lt;p&gt;Excel does not natively convert dynamic grouped ranges into images and embed them into emails. This requires automation logic.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is this possible without coding?
&lt;/h3&gt;

&lt;p&gt;Basic scenarios can be handled with VBA, but structured grouped automation often requires dedicated automation software.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;If you're trying to send multiple rows per email from Excel, the real challenge is grouping the data correctly and generating one structured report per recipient.&lt;/p&gt;

&lt;p&gt;Once that part is automated, the email step becomes simple.&lt;/p&gt;

&lt;p&gt;Understanding this distinction is the key to solving the problem efficiently.&lt;/p&gt;

&lt;p&gt;Reposted from &lt;a href="https://www.sqlmessenger.com/excel-send-multiple-rows-per-email" rel="noopener noreferrer"&gt;https://www.sqlmessenger.com/excel-send-multiple-rows-per-email&lt;/a&gt;&lt;/p&gt;

</description>
      <category>excel</category>
      <category>sqlmessenger</category>
      <category>email</category>
    </item>
    <item>
      <title>Working with Plugins in SQLMessenger</title>
      <dc:creator>AndySqlman</dc:creator>
      <pubDate>Thu, 12 Feb 2026 08:46:18 +0000</pubDate>
      <link>https://dev.to/sqlman/working-with-plugins-in-sqlmessenger-12k2</link>
      <guid>https://dev.to/sqlman/working-with-plugins-in-sqlmessenger-12k2</guid>
      <description>&lt;p&gt;Starting from &lt;strong&gt;SQLMessenger&lt;/strong&gt; version 2.3, the plugin feature has been introduced. We package some universal or complex functions into plugins. You only need to install these plugins in SQLMessenger to immediately enable the desired functions. For example, the &lt;strong&gt;SQLTelebot&lt;/strong&gt; mentioned in &lt;a href="https://www.sqlmessenger.com/docreader.html?id=583" rel="noopener noreferrer"&gt;How to Send Telegram Messages Using SQL Statements&lt;/a&gt; is a SQLMessenger plugin. After installing this plugin, you can quickly enable Telegram message receiving and sending within SQLMessenger.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzp4o6oowswtbqdiukzwp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzp4o6oowswtbqdiukzwp.png" alt="The SQLTelebot plugin for SQLMessenger" width="800" height="441"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;center&gt;The SQLTelebot plugin for SQLMessenger&lt;/center&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h3&gt;
  
  
  Benefits of Using Plugins
&lt;/h3&gt;

&lt;p&gt;(1) For your complex functional requirements, we package the pre-configured tasks and initialization scripts into a plugin installer. You only need one-click installation to use the corresponding functions – simple and hassle-free.&lt;/p&gt;

&lt;p&gt;(2) Plugins have independent configuration interfaces, allowing you to configure and manage functions easily and intuitively.&lt;/p&gt;

&lt;p&gt;(3) You can view all source code of plugins, helping you understand technical details in depth.&lt;/p&gt;

&lt;p&gt;(4) When a plugin is no longer needed, you can uninstall it to free up system resources.&lt;/p&gt;

&lt;h3&gt;
  
  
  Installing Plugins
&lt;/h3&gt;

&lt;p&gt;Before using a plugin, you must install it in your SQLMessenger system. For standard plugins, go to Task Manager, click "Plugin Management", find the required plugin in the list, and click the "Install" button on the right to open the installation interface.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flspz4sal89z5faw5p5hb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flspz4sal89z5faw5p5hb.png" alt="Install plugins in " width="800" height="375"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;center&gt;Install plugins in "Plugin Management"&lt;/center&gt;

&lt;p&gt; &lt;br&gt;
For custom plugins we provide, go to Task Manager, click the "Import Task" button, and select the plugin installation file (with .pkg extension) we sent you to open the installation interface.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhf7xx23ssw6pdda7brag.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhf7xx23ssw6pdda7brag.png" alt="Install plugins via " width="800" height="360"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;center&gt;Install plugins via "Import Task"&lt;/center&gt;

&lt;p&gt; &lt;br&gt;
On the plugin installation page, you can view the function description, manual, and support information. Click "Start Installation" in the bottom-right corner to install the plugin.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj8d8fb86wifkedpau3yz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj8d8fb86wifkedpau3yz.png" alt="The plugin installation interface" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;center&gt;The plugin installation interface&lt;/center&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe8wpgg772von1hb8l3ie.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe8wpgg772von1hb8l3ie.png" alt="Plugin installed successfully" width="800" height="446"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;center&gt;Plugin installed successfully&lt;/center&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h3&gt;
  
  
  Using Plugins
&lt;/h3&gt;

&lt;p&gt;After the plugin is installed, you can click the shortcut icon it creates on the MainPage to open its management interface, where you can configure and manage the plugin.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fynsl8zrkhkclt3aeob56.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fynsl8zrkhkclt3aeob56.png" alt="Click the shortcut icon on the MainPage to open the plugin" width="800" height="446"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;center&gt;Click the shortcut icon on the MainPage to open the plugin&lt;/center&gt;

&lt;p&gt; &lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Figl0e9l4f1d2tnl8dg2l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Figl0e9l4f1d2tnl8dg2l.png" alt="The SQLTelebot plugin management interface" width="800" height="446"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;center&gt;The SQLTelebot plugin management interface&lt;/center&gt;

&lt;p&gt; &lt;br&gt;
&lt;strong&gt;Note&lt;/strong&gt;: For detailed usage, please refer to the documentation of the corresponding plugin.&lt;br&gt;
 &lt;/p&gt;

&lt;h3&gt;
  
  
  Uninstalling Plugins
&lt;/h3&gt;

&lt;p&gt;If a plugin is no longer in use, you can uninstall it to free system resources. Go to Task Manager, click "Plugin Management", find the plugin, and click "Uninstall" on the right.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffvaqwgm31up7w5pz0l1o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffvaqwgm31up7w5pz0l1o.png" alt="Uninstall plugin" width="800" height="352"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;center&gt;Uninstall plugin&lt;/center&gt;

&lt;p&gt; &lt;br&gt;
&lt;strong&gt;Note&lt;/strong&gt;: When uninstalling a plugin, the system only removes plugin tasks, not plugin data. To re-enable the plugin, simply reinstall it.&lt;br&gt;
 &lt;/p&gt;

&lt;h3&gt;
  
  
  FAQ
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Are plugins charged separately?&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
Standard plugins are free. Simple custom requirements are usually free. For high-complexity, high-workload requirements, we will decide whether to charge after evaluating development effort.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Can plugins be updated? How?&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
Plugins support updates. When a new version is available, uninstall the old version and reinstall the new one. Plugin data will not be deleted during uninstallation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Can I develop my own plugins?&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
Plugin development is relatively complex, so user-developed plugins are not currently supported. We will simplify the development process in the future, allowing you to create your own plugins. For now, we recommend submitting your requirements to our team for development.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Will installing multiple plugins affect system performance?&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
Generally not. Plugins consume only a small amount of resources when running tasks; they use almost no resources when idle. If too many plugins run simultaneously, you can uninstall unused ones to ensure smooth performance.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Reposted from &lt;a href="https://www.sqlmessenger.com/docreader.html?id=602" rel="noopener noreferrer"&gt;https://www.sqlmessenger.com/docreader.html?id=602&lt;/a&gt;&lt;/p&gt;

</description>
      <category>sqlmessenger</category>
    </item>
    <item>
      <title>How to Bulk Send Password-Protected Payroll PDFs to Employees via Email</title>
      <dc:creator>AndySqlman</dc:creator>
      <pubDate>Wed, 11 Feb 2026 13:48:35 +0000</pubDate>
      <link>https://dev.to/sqlman/how-to-bulk-send-password-protected-payroll-pdfs-to-employees-via-email-2o8o</link>
      <guid>https://dev.to/sqlman/how-to-bulk-send-password-protected-payroll-pdfs-to-employees-via-email-2o8o</guid>
      <description>&lt;p&gt;Distributing payroll files to employees every month can be a time-consuming task, especially when each file needs to be password-protected for privacy. SQLMessenger provides tools to simplify this process, allowing HR and IT teams to send individual PDF files securely and efficiently. In this guide, we’ll show you how to use SQLMessenger’s &lt;strong&gt;“Distribute PDF Files By Email”&lt;/strong&gt; plugin to automate this workflow.&lt;/p&gt;

&lt;p&gt;The image below shows the list of PDF files to be sent in this example.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Furqlr01m4utgpkfx3cez.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Furqlr01m4utgpkfx3cez.png" alt="Files to be distributed" width="800" height="463"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Install the “Distribute PDF Files By Email” Plugin
&lt;/h2&gt;

&lt;p&gt;For the first use, you need to install the "Distribute PDF Files By Email" plugin in "Plugin Manager".&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqyurszhhggyhiva7d6i7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqyurszhhggyhiva7d6i7.png" alt="Install the " width="800" height="461"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Prepare Your File List
&lt;/h2&gt;

&lt;p&gt;Click the "Distribute PDF Files By Email" icon on the MainPage to open the task, then switch to "Information Distribute" page, click the "Download Template File" button to download the template table of the file list.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fud0zut4oco2t7qrac87k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fud0zut4oco2t7qrac87k.png" alt="Open the task and download the template table" width="800" height="425"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Fill in the file names to be sent, recipient addresses, email subjects and email bodies in the template table. You can copy your prepared recipient list into the template table here. Ensure that the table contains the fields "Email", "Subject", "Body" and "FileName".&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwgeiha1r37hl35ixwbft.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwgeiha1r37hl35ixwbft.png" alt="Copy recipient list to template table" width="800" height="475"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Columns such as "&lt;strong&gt;Subject&lt;/strong&gt;", "&lt;strong&gt;Body&lt;/strong&gt;", and "&lt;strong&gt;FileName&lt;/strong&gt;" can be quickly generated using Excel formulas. For example, in this case:&lt;br&gt;
The Body can be generated with the formula&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;="Hello "&amp;amp;A2&amp;amp;",
Your January 2026 payslip is attached.
For security purposes, the PDF is protected with a password.
Please let us know if you have any questions.
Best regards,
Payroll Team".
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this example, &lt;strong&gt;Column C&lt;/strong&gt; stores email addresses. Since the files to be distributed are also named using email addresses, the value for the "&lt;strong&gt;FileName&lt;/strong&gt;" field can be quickly generated using the following formula:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;="D:\Payslip\2026_01\Payslip_2026_01_"&amp;amp;C2&amp;amp;".pdf"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fla0orhcfgk1hzdhoniy5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fla0orhcfgk1hzdhoniy5.png" alt="Edited file list" width="800" height="421"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Import the File List
&lt;/h2&gt;

&lt;p&gt;After editing the file list, click the "Import Recipient List" button in SQLMessenger, then import the edited file list from the previous step into the system.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffe488eqvkjbsaccesi1r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffe488eqvkjbsaccesi1r.png" alt="Import file list into system" width="800" height="371"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Run the Task and Verify
&lt;/h2&gt;

&lt;p&gt;Check if the list content is correct, then click "OK". The system will run this task and generate an email for each file.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsbahdoarvpikux3iyh60.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsbahdoarvpikux3iyh60.png" alt="Run the task" width="800" height="409"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After the task is completed, you can spot-check whether the email content is correct on the interface.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuidpihvt58ctqhg0rhry.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuidpihvt58ctqhg0rhry.png" alt="Spot-check email content" width="800" height="368"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can click the attachment icon to open the file.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3orb9j4e1gcr1utkqt3a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3orb9j4e1gcr1utkqt3a.png" alt="Click the attachment icon to open the file" width="800" height="368"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy191djx5ikrdqwygnn80.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy191djx5ikrdqwygnn80.png" alt="The file is now password-protected" width="800" height="373"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Approve and Send Emails
&lt;/h2&gt;

&lt;p&gt;After confirming that the email content is correct, click the "Approval &amp;amp; Send" button, then click "Approval All", check "Approved", and click "OK". The system will start sending these emails.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff9zicuh7xy5iv7q9k4lo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff9zicuh7xy5iv7q9k4lo.png" alt="Approve and start sending emails" width="800" height="367"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If the "Approval &amp;amp; Send" button is not visible, click the "Refresh" button first.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjnsur5edt7lqig0l011w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjnsur5edt7lqig0l011w.png" alt="Click the " width="800" height="238"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can check the email sending progress in "Email &amp;amp; Message Manager".&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffchmri8a15etrvqbe25e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffchmri8a15etrvqbe25e.png" alt="Check email sending progress in " width="800" height="281"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Optional: Other Distribution Channels
&lt;/h2&gt;

&lt;p&gt;While this guide focuses on email, SQLMessenger also supports distribution via Slack or Telegram. Contact SQLMessenger support to get the corresponding task configuration files.&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary:
&lt;/h2&gt;

&lt;p&gt;By following these steps, HR and IT teams can efficiently send hundreds of payroll PDFs every month, each protected with a unique password. This method saves time, reduces errors, and ensures employee privacy.&lt;/p&gt;

&lt;p&gt;Reposted from &lt;a href="https://www.sqlmessenger.com/docreader.html?id=601" rel="noopener noreferrer"&gt;https://www.sqlmessenger.com/docreader.html?id=601&lt;/a&gt;&lt;/p&gt;

</description>
      <category>automation</category>
      <category>pdf</category>
    </item>
    <item>
      <title>Automatically execute report tasks and send results to the sender upon receiving a Slack message</title>
      <dc:creator>AndySqlman</dc:creator>
      <pubDate>Fri, 21 Nov 2025 05:43:30 +0000</pubDate>
      <link>https://dev.to/sqlman/automatically-execute-report-tasks-and-send-results-to-the-sender-upon-receiving-a-slack-message-2lm9</link>
      <guid>https://dev.to/sqlman/automatically-execute-report-tasks-and-send-results-to-the-sender-upon-receiving-a-slack-message-2lm9</guid>
      <description>&lt;p&gt;Reposted from &lt;a href="https://www.sqlmessenger.com/docreader.html?id=594" rel="noopener noreferrer"&gt;https://www.sqlmessenger.com/docreader.html?id=594&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Overview
&lt;/h2&gt;

&lt;p&gt;SQLMessenger has provided the ability to receive Slack messages starting from version 2.3.0001. You can use SQLMessenger to receive Slack messages and process them automatically.&lt;/p&gt;

&lt;p&gt;This document demonstrates, through a practical example, how to receive Slack messages, query data based on the message content, and return the query results (as an Excel file) to the sender.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Case Background
&lt;/h2&gt;

&lt;p&gt;Alex works as a data administrator at a company. His colleagues frequently send him Excel files through Slack. Each file contains some product codes. Alex needs to look up the prices and other related information of these products in the database, and then reply to his colleagues with the results.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw02s939ueav74nyezri2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw02s939ueav74nyezri2.png" alt="The Excel file Alex received from a colleague" width="800" height="381"&gt;&lt;/a&gt;&lt;br&gt;The Excel file Alex received from a colleague
  &lt;/p&gt;

&lt;p&gt;After receiving a file, Alex must import the data into the database, run SQL queries to retrieve information for each product, and export the query results into an Excel spreadsheet.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6pmcwykwjqwxu3eb8bfu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6pmcwykwjqwxu3eb8bfu.png" alt="Alex imports the Excel spreadsheet into the database and queries the product data" width="800" height="323"&gt;&lt;/a&gt;&lt;br&gt;Alex imports the Excel spreadsheet into the database and queries the product data
  &lt;/p&gt;

&lt;h2&gt;
  
  
  3. Automation with SQLMessenger
&lt;/h2&gt;

&lt;p&gt;Alex has now automated this entire workflow using SQLMessenger. His configuration includes the following steps:&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Configure a report task in SQLMessenger that imports the Excel file into the database, queries product data, converts the results into an Excel file, and sends the result back to the original sender.
&lt;/h3&gt;

&lt;p&gt;*As Alex was just getting started with SQLMessenger, he was unfamiliar with configuring tasks. After a detailed discussion of his requirements, the SQLMessenger team set up a reporting task for him to handle incoming Excel files and query product data.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo5b0aq5en03midlh8j9q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo5b0aq5en03midlh8j9q.png" alt=" " width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh6598noxvuejz67o58nt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh6598noxvuejz67o58nt.png" alt="The report task the SQLMessenger team configured for Alex" width="800" height="427"&gt;&lt;/a&gt;&lt;br&gt;The report task the SQLMessenger team configured for Alex
  &lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Configure two Slack bots in SQLMessenger—one for receiving Slack messages from colleagues, and another for sending the query results back through Slack.
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fudpmxwljss9bwpf8ia29.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fudpmxwljss9bwpf8ia29.png" alt="Configure two Slack bots in SQLMessenger" width="800" height="427"&gt;&lt;/a&gt;&lt;br&gt;Configure two Slack bots in SQLMessenger
  &lt;/p&gt;

&lt;h2&gt;
  
  
  4. Testing the Workflow
&lt;/h2&gt;

&lt;p&gt;After completing the configuration, we sent a file from Slack to test the system.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwoqbsdmnypjuj5n5tph1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwoqbsdmnypjuj5n5tph1.png" alt="Send a file from Slack to the Slack App configured in SQLMessenger" width="800" height="448"&gt;&lt;/a&gt;&lt;br&gt;Send a file from Slack to the Slack App configured in SQLMessenger
  &lt;/p&gt;

&lt;p&gt;SQLMessenger automatically processes the file, performs the query, and replies to the sender with the results.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmmxkxijh3c4lpu9ykx6g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmmxkxijh3c4lpu9ykx6g.png" alt="SQLMessenger automatically converts the query results into an Excel file" width="800" height="422"&gt;&lt;/a&gt;&lt;br&gt;SQLMessenger automatically converts the query results into an Excel file
  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5s382nwp9e0cep2w4bjt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5s382nwp9e0cep2w4bjt.png" alt="SQLMessenger sends the file to the sender" width="800" height="448"&gt;&lt;/a&gt;&lt;br&gt;SQLMessenger sends the file to the sender
  &lt;/p&gt;

&lt;p&gt;In addition to this scenario, SQLMessenger can execute different tasks based on the sender’s account and the content of the message, providing highly flexible message-driven automation.&lt;/p&gt;

</description>
      <category>sql</category>
      <category>sqlmessenger</category>
      <category>slack</category>
      <category>workflow</category>
    </item>
    <item>
      <title>Send Excel Rows as Individual Emails Automatically</title>
      <dc:creator>AndySqlman</dc:creator>
      <pubDate>Fri, 18 Jul 2025 02:49:59 +0000</pubDate>
      <link>https://dev.to/sqlman/send-excel-rows-as-individual-emails-automatically-3595</link>
      <guid>https://dev.to/sqlman/send-excel-rows-as-individual-emails-automatically-3595</guid>
      <description>&lt;p&gt;Reposted from &lt;a href="https://www.sqlmessenger.com/docreader.html?id=592" rel="noopener noreferrer"&gt;https://www.sqlmessenger.com/docreader.html?id=592&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;💡In many workplace scenarios, we often need to convert rows from Excel into personalized emails — such as sending performance summaries, customer invoices, internal reports, or appointment reminders. Doing this manually can be extremely time-consuming.&lt;/p&gt;

&lt;p&gt;This guide demonstrates a universal, no-code method to automate such tasks using SQLMessenger. We'll use KPI reports as an example, but the same method applies to any Excel-to-email use case.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnypgkgiwcible02t6equ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnypgkgiwcible02t6equ.png" alt=" " width="800" height="454"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Benefits:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Configure once, reuse anytime.&lt;/li&gt;
&lt;li&gt;No coding required.&lt;/li&gt;
&lt;li&gt;Design the email body template directly in Excel, just like you’re used to.&lt;/li&gt;
&lt;li&gt;You can also deliver the reports through Slack in text, PDF, or image formats by adjusting the task settings.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  1. Prepare the Email Template and the KPI List Template
&lt;/h3&gt;

&lt;p&gt;You can edit the &lt;strong&gt;email body template&lt;/strong&gt; and &lt;strong&gt;KPI list template&lt;/strong&gt; in Excel first. These templates will be used in the second step when configuring the email task.&lt;/p&gt;

&lt;h4&gt;
  
  
  1.1 Design the email template in Excel for batch sending. Use '#@@LoopData(fieldname)#' as the placeholder for dynamic list fields.
&lt;/h4&gt;

&lt;p&gt;For example, replace the salutation '&lt;strong&gt;Dear John&lt;/strong&gt;' in the email with the placeholder '&lt;strong&gt;Dear #@@LoopData(FirstName)#&lt;/strong&gt;'. Here, "&lt;strong&gt;#@@LoopData(FirstName)#&lt;/strong&gt;" indicates that the "&lt;strong&gt;FirstName&lt;/strong&gt;" field from the &lt;strong&gt;KPI list&lt;/strong&gt; will be dynamically displayed in this position.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F77tsw70esl9rwlmss0h8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F77tsw70esl9rwlmss0h8.png" alt=" " width="800" height="250"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The designed email body template is as follows:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhg831labozwc5apsmxwm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhg831labozwc5apsmxwm.png" alt=" " width="800" height="481"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  1.2 Create a blank "KPI List Table" by removing all KPI data rows, keeping only the header row.
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxlr59p0cmnmvl9k89yi0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxlr59p0cmnmvl9k89yi0.png" alt=" " width="800" height="287"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Configure Email Task
&lt;/h3&gt;

&lt;p&gt;Configure an email dispatch task in SQLMessenger. Once set up, executing this task with monthly KPI list imports will automatically generate and send batch KPI notification emails.&lt;/p&gt;

&lt;h4&gt;
  
  
  2.1 Create a task in SQLMessenger and select "Email" as the task type.
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4xounmzmvdvs8vqhff55.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4xounmzmvdvs8vqhff55.png" alt=" " width="800" height="257"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmfyvhh12yuurr6k609ww.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmfyvhh12yuurr6k609ww.png" alt=" " width="800" height="258"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  2.2 Under the task's "Advanced Options", check "Send task-generated emails and messages only after my approval".
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fedbzbqboggp7aq3sisn7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fedbzbqboggp7aq3sisn7.png" alt=" " width="800" height="385"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  2.3 In "Information Distribute":
&lt;/h4&gt;

&lt;p&gt;(1) Check the &lt;strong&gt;"Generate a subtask instance for each recipient in the Recipient List to individually query and send information (Loop Task)"&lt;/strong&gt; option.&lt;br&gt;
(2) Click the &lt;strong&gt;"Recipient List (Loop Data) Config"&lt;/strong&gt; button.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmyfjwlldhpjoaoxcr81a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmyfjwlldhpjoaoxcr81a.png" alt=" " width="800" height="274"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  2.4 In the "Recipient List (Loop Data) Config" dialog:
&lt;/h4&gt;

&lt;p&gt;(1) Click "Select Data File" button.&lt;/p&gt;

&lt;p&gt;(2) Choose "KPI List Template.xlsx" created in Step 1.2.&lt;/p&gt;

&lt;p&gt;(3) Click the "OK" button to close the "Recipient List (Loop Data) Config" dialog.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3921moufecx1ymxb6dlz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3921moufecx1ymxb6dlz.png" alt=" " width="800" height="453"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  2.5 On the "Task Template" tab:
&lt;/h4&gt;

&lt;p&gt;(1) Click the "Insert Pre-Designed Table" button.&lt;/p&gt;

&lt;p&gt;(2) Select the email template table designed in Step 1.1.&lt;/p&gt;

&lt;p&gt;(3) Click the "OK" button.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3fem8smj4z4iq371sv8w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3fem8smj4z4iq371sv8w.png" alt=" " width="800" height="452"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  2.6 Set the email subject:
&lt;/h4&gt;

&lt;p&gt;Replace "June 2025" in the subject line "Your KPI Performance – June 2025" with the placeholder "#@@LoopData(KPI_Month)#". SQLMessenger will automatically populate it with the value from the "KPI_Month" field in the KPI list.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5u1egzmfkfe89fcz01km.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5u1egzmfkfe89fcz01km.png" alt=" " width="800" height="341"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  2.7 Click the button on the right side of "Send To" to configure recipients.
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnipu2tjw1epnpg6h5osi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnipu2tjw1epnpg6h5osi.png" alt=" " width="800" height="246"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click the "&lt;strong&gt;Add From a Variable&lt;/strong&gt;" button, then click the button next to "&lt;strong&gt;@@LoopData()&lt;/strong&gt;" under "&lt;strong&gt;System Variables/Functions&lt;/strong&gt;."&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsflmur0oypyib9s2t71i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsflmur0oypyib9s2t71i.png" alt=" " width="800" height="389"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the "&lt;strong&gt;Set Function Parameters&lt;/strong&gt;" dialog box, select the "&lt;strong&gt;Email&lt;/strong&gt;" field, then click "&lt;strong&gt;OK&lt;/strong&gt;."&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxolx7y3gw3eafbl1d0lv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxolx7y3gw3eafbl1d0lv.png" alt=" " width="800" height="389"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  2.8 Click the "Deploy" button at the bottom right of the task configuration window to activate the new task.
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fquxjsip6rli8b661uflz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fquxjsip6rli8b661uflz.png" alt=" " width="800" height="452"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The task configuration is complete. The configuration only needs to be done once. In the future, when distributing KPI data each month, you can simply run this task and import the current month's KPI list.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Run the Task and Distribute KPI Data
&lt;/h3&gt;

&lt;p&gt;When you need to distribute KPI data each month, simply run the task that was configured in the previous step.&lt;/p&gt;

&lt;h4&gt;
  
  
  3.1 In Task Manager, click on the task name configured in the previous step to run it.
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvpsi53t5jfrpy5a1p1bv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvpsi53t5jfrpy5a1p1bv.png" alt=" " width="800" height="266"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  3.2 Click "Information Distribute" -&amp;gt; "Import Recipient List", then select the KPI table to be distributed.
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffd2fq1w3lyu9w0t0cvno.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffd2fq1w3lyu9w0t0cvno.png" alt=" " width="800" height="452"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;u&gt;After verifying that the table data is correct&lt;/u&gt;, click the "OK" button. SQLMessenger will then begin generating the emails.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu3fp2ljcr1viviy3cec0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu3fp2ljcr1viviy3cec0.png" alt=" " width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  3.3 After the task is completed, click the email icon in the "Message" column to view the emails generated by SQLMessenger. You can randomly check a few of them to make sure the content is correct.
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fplp15wfq9nuospfigbno.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fplp15wfq9nuospfigbno.png" alt=" " width="800" height="452"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  3.4 After confirming that the email content is correct, click the "Approval &amp;amp; Send" button in the "Sub - Task Instances" dialog box.
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fslxf5i0tc8yxbx0swd93.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fslxf5i0tc8yxbx0swd93.png" alt=" " width="800" height="456"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If the "Approval &amp;amp; Send" button cannot be found in the "Sub-Task Instances" dialog box&lt;/strong&gt;, click the "Close" button, then click the "View Results of the Task Instance" button on the toolbar to reopen the "Sub-Task Instances" dialog box.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa8btk18cih7zvc8wg0ga.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa8btk18cih7zvc8wg0ga.png" alt=" " width="800" height="419"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  3.5 In the "Approval" dialog box, click the "Approve All" button, then check the "Approved, send the messages generated by the selected task instances" option, and click the "OK" button. SQLMessenger will then begin sending these emails.
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fse62jypek6kwbis9iqr8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fse62jypek6kwbis9iqr8.png" alt=" " width="800" height="392"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  3.6 You can monitor the email sending progress in "Email &amp;amp; Message Manager" -&amp;gt; "Outbox".
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk1puejdxndm0gl4qmew5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk1puejdxndm0gl4qmew5.png" alt=" " width="800" height="457"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  3.7 To cancel sending emails, select the emails you want to cancel in the "Outbox", then click the "Cancel Sending" button.
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fny6130wdve7lbtxuqc4b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fny6130wdve7lbtxuqc4b.png" alt=" " width="800" height="456"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  💡With a few simple adjustments to the email task, you can also achieve the following:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Convert the email body into a password-protected PDF for secure delivery&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Send the document to recipients via Slack&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Convert the email content into an image and send it as a visual message&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're interested in any of these use cases, feel free to share your thoughts or questions in the comments below!&lt;/p&gt;

</description>
      <category>sqlmessenger</category>
      <category>excel</category>
      <category>email</category>
      <category>automate</category>
    </item>
    <item>
      <title>SQLMessenger Case Collection</title>
      <dc:creator>AndySqlman</dc:creator>
      <pubDate>Sat, 12 Jul 2025 11:50:49 +0000</pubDate>
      <link>https://dev.to/sqlman/sqlmessenger-case-collection-7i6</link>
      <guid>https://dev.to/sqlman/sqlmessenger-case-collection-7i6</guid>
      <description>&lt;h2&gt;
  
  
  &lt;a href="https://www.sqlmessenger.com/case.html?id=586" rel="noopener noreferrer"&gt;From Manual to Automated: Improving Report Workflow with SQLMessenger&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;This case study describes how a reporting analyst transitioned from a manual, time-consuming reporting process to a fully automated workflow using SQLMessenger. Previously, daily report preparation involved running SQL queries, copying results into Excel, formatting the file, and sending it via email. By configuring a scheduled task in SQLMessenger, the entire process was automated—from query execution to email delivery—saving time and reducing repetitive work.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;a href="https://www.sqlmessenger.com/case.html?id=587" rel="noopener noreferrer"&gt;From Hours of Manual Work to One-Click Reports&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;This case study outlines how a reporting administrator at a retail company streamlined his daily reporting process using SQLMessenger. Previously, he spent over an hour each morning generating, formatting, securing, and emailing performance reports to ten regional offices. With increasing security requirements—including PDF formatting, password protection, and watermarking—the manual process became even more burdensome. By setting up SQLMessenger, the entire workflow was automated: custom reports are now generated, secured, and sent to the appropriate recipients in minutes, significantly reducing manual effort and improving reliability.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;a href="https://www.sqlmessenger.com/case.html?id=588" rel="noopener noreferrer"&gt;Automating Data Workflows with SQLMessenger&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;This case study describes how a data coordinator automated a daily email-to-database workflow using SQLMessenger. Previously, she manually downloaded spreadsheet attachments, imported the data into a database, and replied to each sender with confirmation. With SQLMessenger, the system now automatically processes incoming emails, extracts and validates spreadsheet data, imports it into the database, and sends confirmation or error notifications based on the results. The new workflow reduces manual effort, enforces data quality rules, and standardizes communication.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;a href="https://www.sqlmessenger.com/case.html?id=589" rel="noopener noreferrer"&gt;From 90 Minutes of Manual Work to One Click: How SQLMessenger Transformed Lily's Workflow&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;This case study outlines how a teaching assistant automated a repetitive daily task using SQLMessenger. Previously, she spent 90 minutes each morning sorting student absence data, capturing screenshots, and sending individualized emails to over 40 instructors. By configuring an automated workflow in SQLMessenger, the system now organizes the data, converts it into images, and prepares personalized emails for each instructor. The only manual step remaining is a quick review and approval. This change reduced a 90-minute task to just a few minutes each day.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;a href="https://www.sqlmessenger.com/case.html?id=590" rel="noopener noreferrer"&gt;Transforming Manual Alert Management into an Automated Workflow&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;This case study describes how a tech company employee automated her daily alert management process using a custom SQLMessenger plugin. Previously, she manually collected alert and resolution emails, compiled the data into an Excel sheet, and distributed the report to department leads. With the new setup, SQLMessenger automatically extracts alert details and resolution updates from incoming emails, populates a centralized spreadsheet, and sends the final report at the end of each day. It also issues reminders when alerts approach their resolution deadlines. The automation significantly reduces manual work and improves efficiency.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;a href="https://www.sqlmessenger.com/case.html?id=591" rel="noopener noreferrer"&gt;Automated Email List Cleanup Using SQLMessenger and Gemini AI&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;This document describes how a sales representative used SQLMessenger and Gemini AI to identify and manage bounced email addresses in a large contact list. It outlines the problem, the tools used, the steps taken, and the resulting outputs, including categorized email lists.&lt;/p&gt;

</description>
      <category>sqlmessenger</category>
      <category>automation</category>
      <category>gemini</category>
      <category>ai</category>
    </item>
    <item>
      <title>Automating Secure Invoice Delivery with AttachmentMailerTool</title>
      <dc:creator>AndySqlman</dc:creator>
      <pubDate>Fri, 27 Jun 2025 09:24:07 +0000</pubDate>
      <link>https://dev.to/sqlman/automating-secure-invoice-delivery-with-attachmentmailertool-1c5l</link>
      <guid>https://dev.to/sqlman/automating-secure-invoice-delivery-with-attachmentmailertool-1c5l</guid>
      <description>&lt;h1&gt;
  
  
  Automating Secure Invoice Delivery with AttachmentMailerTool
&lt;/h1&gt;

&lt;p&gt;Every month, I need to send invoices (PDF format) to a large number of clients. To protect client privacy, each PDF file must be password-protected. The password format we use is the client's account number combined with the last four digits of their phone number. To automate this process, we use the &lt;strong&gt;AttachmentMailerTool&lt;/strong&gt; plugin from &lt;strong&gt;SQLMessenger&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why AttachmentMailerTool?
&lt;/h2&gt;

&lt;p&gt;AttachmentMailerTool not only allows us to send each client's invoice individually via email, but it also supports:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Admin Passwords&lt;/strong&gt; and &lt;strong&gt;Open Passwords&lt;/strong&gt; for PDF files&lt;/li&gt;
&lt;li&gt;Adding &lt;strong&gt;watermarks&lt;/strong&gt; to PDFs if needed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's a flexible and secure tool that helps us streamline the entire document delivery process.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step-by-Step Instructions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Prepare Your Spreadsheet
&lt;/h3&gt;

&lt;p&gt;First, I prepare a spreadsheet with the required columns for AttachmentMailerTool. The necessary columns are:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;br&gt;
To_Emails, CC_Emails, Subject, Body, File_Path, Admin_Password, Open_Password, Watermark_Text&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5i1c159rh0lojxre8pzb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5i1c159rh0lojxre8pzb.png" alt="Image description" width="800" height="295"&gt;&lt;/a&gt;&lt;br&gt;
You can refer to the "&lt;a href="https://www.sqlmessenger.com/manual/plugin-attachmentmailertool-guide.htm#fields" rel="noopener noreferrer"&gt;AttachmentMailerTool Manual - Column Descriptions&lt;/a&gt;" for details about each column.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz277ghr3yer99alo0yio.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz277ghr3yer99alo0yio.png" alt="Image description" width="800" height="298"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Here's how I populate each column:
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Column Name&lt;/th&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;To_Emails&lt;/td&gt;
&lt;td&gt;Formula&lt;/td&gt;
&lt;td&gt;Since column G already contains the client’s email address, I use the formula &lt;code&gt;=G2&lt;/code&gt; to copy it into the To_Emails column.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CC_Emails&lt;/td&gt;
&lt;td&gt;Empty&lt;/td&gt;
&lt;td&gt;Since we don’t need to CC anyone, this column is left blank.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Subject&lt;/td&gt;
&lt;td&gt;Formula&lt;/td&gt;
&lt;td&gt;I use the formula &lt;code&gt;="Your "&amp;amp;A2&amp;amp;" Invoice is Attached"&lt;/code&gt; to include the invoice month (from column A). For example, the subject becomes: Your June 2025 Invoice is Attached&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Body&lt;/td&gt;
&lt;td&gt;Formula&lt;/td&gt;
&lt;td&gt;I use a formula to generate an HTML email body for better formatting. The formula is long, so I won’t include it here, but you can contact me if you’d like a copy. You can also insert your company logo into the email body.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;File_Path&lt;/td&gt;
&lt;td&gt;Formula&lt;/td&gt;
&lt;td&gt;All invoice files are stored locally in d:\invoice\, with each client having their own folder. For example, client CN001’s June invoice is saved as: &lt;code&gt;d:\invoice\cn001\Invoice-June-2025.pdf&lt;/code&gt; I use this formula to generate the file path: &lt;code&gt;="D:\invoice\"&amp;amp;C2&amp;amp;"\Invoice-"&amp;amp;SUBSTITUTE(A2," ","-")&amp;amp;".pdf"&lt;/code&gt; (Column A contains the month like "June 2025", and Column C contains the client account number.)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Admin_Password&lt;/td&gt;
&lt;td&gt;Text&lt;/td&gt;
&lt;td&gt;Enter &lt;code&gt;{[AUTO]}&lt;/code&gt; to have AttachmentMailerTool generate a random admin password for each PDF automatically.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Open_Password&lt;/td&gt;
&lt;td&gt;Formula&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;=LOWER(C2)&amp;amp;RIGHT(F2, 4)&lt;/code&gt; This combines the client account (column C) and the last 4 digits of the phone number (column F).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Watermark_Text&lt;/td&gt;
&lt;td&gt;Empty&lt;/td&gt;
&lt;td&gt;Leaving this column blank means no watermark will be applied to the PDF.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  2. Running the Task in SQLMessenger
&lt;/h3&gt;

&lt;p&gt;(1). In &lt;strong&gt;SQLMessenger&lt;/strong&gt;, double-click the &lt;strong&gt;AttachmentMailerTool&lt;/strong&gt; icon to open the task window.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy95rbj0unwekel0h169j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy95rbj0unwekel0h169j.png" alt="Image description" width="800" height="410"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;(2). Click &lt;strong&gt;Information Distribute&lt;/strong&gt;, then click &lt;strong&gt;Import Recipient List&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo5k3l1sf2l7fbftj3gk3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo5k3l1sf2l7fbftj3gk3.png" alt="Image description" width="800" height="409"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;(3). Click &lt;strong&gt;Browse&lt;/strong&gt; to select the prepared Excel file, then click &lt;strong&gt;OK&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8fwyui19w3iquu4r0dd2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8fwyui19w3iquu4r0dd2.png" alt="Image description" width="800" height="409"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;(4). Review the imported data to ensure all information is correct. Click &lt;strong&gt;OK&lt;/strong&gt; to proceed.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2dy44d9lp0eyf2q8kea5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2dy44d9lp0eyf2q8kea5.png" alt="Image description" width="800" height="410"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;(5). The system will now generate the emails, but will &lt;strong&gt;not send them immediately&lt;/strong&gt;. This is a safety feature to prevent accidental sending of incorrect emails.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Approving and Sending Emails
&lt;/h3&gt;

&lt;p&gt;We can review the generated emails in two ways:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click &lt;strong&gt;View Results of the Task Instance&lt;/strong&gt; in the task log.
&lt;/li&gt;
&lt;li&gt;Or go to &lt;strong&gt;MainMenu → Message Approval&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzn8nf2tt0eye7d07yl05.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzn8nf2tt0eye7d07yl05.png" alt="Image description" width="800" height="409"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the approval window, we can click the &lt;strong&gt;email icon&lt;/strong&gt; to preview each email’s content.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F86ybkkfhlz0zzpvwpv7w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F86ybkkfhlz0zzpvwpv7w.png" alt="Image description" width="800" height="409"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2dho2clm626zwvm3fc4f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2dho2clm626zwvm3fc4f.png" alt="Image description" width="800" height="409"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once we’ve confirmed the emails are correct:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Click &lt;strong&gt;Approval &amp;amp; Send&lt;/strong&gt;, then select &lt;strong&gt;Approve All&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxcdip5gjj3dm0ubyi2rl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxcdip5gjj3dm0ubyi2rl.png" alt="Image description" width="800" height="409"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Check "&lt;strong&gt;Approved, send the messages generated by the selected task instances&lt;/strong&gt;", and click &lt;strong&gt;OK&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8l2emrsjkeg2qae2pp3n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8l2emrsjkeg2qae2pp3n.png" alt="Image description" width="800" height="410"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The system will now begin sending emails. You can monitor the sending progress under: &lt;strong&gt;Email &amp;amp; Message Manager → Outbox&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fegkm8wxm0ceyd3ucv1k6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fegkm8wxm0ceyd3ucv1k6.png" alt="Image description" width="800" height="409"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;This case demonstrates how &lt;strong&gt;SQLMessenger's AttachmentMailerTool&lt;/strong&gt; can streamline and secure the monthly invoice distribution process. By leveraging dynamic formulas in Excel and automated email generation, we can efficiently send personalized, password-protected PDF invoices to each client.&lt;/p&gt;

&lt;p&gt;The tool's ability to add &lt;strong&gt;admin and open passwords&lt;/strong&gt;, as well as optional &lt;strong&gt;watermarks&lt;/strong&gt;, helps ensure document confidentiality and compliance. With built-in &lt;strong&gt;message approval before sending&lt;/strong&gt;, AttachmentMailerTool also reduces the risk of human error.&lt;/p&gt;

&lt;p&gt;Overall, this solution &lt;strong&gt;saves time&lt;/strong&gt;, &lt;strong&gt;improves accuracy&lt;/strong&gt;, and &lt;strong&gt;enhances the professionalism&lt;/strong&gt; of client communications.&lt;/p&gt;




&lt;h2&gt;
  
  
  Need a More Customized Solution?
&lt;/h2&gt;

&lt;p&gt;The &lt;strong&gt;AttachmentMailerTool&lt;/strong&gt; plugin is designed to meet the majority of common email distribution needs, including sending personalized emails with password-protected PDF attachments.&lt;/p&gt;

&lt;p&gt;However, if the built-in features do not fully meet your requirements—for example, if you need to customize more advanced or personalized email body templates—you are welcome to contact the SQLMessenger development team. They are happy to provide &lt;strong&gt;free, personalized solutions&lt;/strong&gt; tailored to your specific needs.&lt;/p&gt;




&lt;p&gt;For more information about AttachmentMailerTool, please visit:&lt;br&gt;&lt;br&gt;
🔗 &lt;a href="https://www.sqlmessenger.com/manual/plugin-attachmentmailertool-index.htm" rel="noopener noreferrer"&gt;https://www.sqlmessenger.com/manual/plugin-attachmentmailertool-index.htm&lt;/a&gt;&lt;br&gt;&lt;br&gt;
📧 Contact the SQLMessenger Team: &lt;strong&gt;&lt;a href="mailto:support@sqlmessenger.com"&gt;support@sqlmessenger.com&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>automation</category>
      <category>pdf</category>
      <category>email</category>
      <category>sqlmessenger</category>
    </item>
  </channel>
</rss>
