首页 > 解决方案 > 使用 sp-send-dbmail 将 Canvas 转换为图像并通过电子邮件发送

问题描述

目前,我正在尝试使用 SQL Server 中的存储过程(从某些查询中提取和显示数据)发送电子邮件,方法是尝试将 HTML Canvas 转换为 PNG 图像并将其发送到邮件正文(无附件)。然而,我得到的只是一封空白电子邮件。

这个想法是为每一行生成一个包含全部数据的图像,并将其发送到相应的电子邮件。

这是我想要制作的矩形的画布,但无济于事。

<html lang="en">
   <head>
   <meta charset="UTF-8" />
   <title>Image</title>
   <script>

function init() {

  var canvas = document.getElementById("canvas");
  var ctx = canvas.getContext("2d");

         ctx.fillRect(50,50,50,50);

          var img = new Image();
          img.src = canvas.toDataURL("image/png");
          return img;
}

function draw(ctx) {

  var alpha = ctx.globalAlpha;

  // capa1/Rectngulo
  ctx.save();
  ctx.save();
  ctx.shadowColor = "rgb(0, 0, 0)";
  ctx.shadowOffsetX = 0.0;
  ctx.shadowOffsetY = 7.0;
  ctx.shadowBlur = 10.0;
  ctx.globalAlpha = alpha * 0.30;
  ctx.beginPath();
  ctx.moveTo(294.4, 146.3);
  ctx.lineTo(15.9, 146.3);
  ctx.lineTo(15.9, 8.0);
  ctx.lineTo(294.4, 8.0);
  ctx.lineTo(294.4, 146.3);
  ctx.closePath();
  ctx.fillStyle = "rgb(213, 213, 213)";
  ctx.fill();
  ctx.lineWidth = 0.8;
  ctx.stroke();

  // capa1/Rectngulo
  ctx.shadowColor = "rgb(0, 0, 0)";
  ctx.shadowOffsetX = 0.0;
  ctx.shadowOffsetY = 7.0;
  ctx.shadowBlur = 10.0;
  ctx.beginPath();
  ctx.moveTo(294.4, 338.2);
  ctx.lineTo(15.9, 338.2);
  ctx.lineTo(15.9, 199.8);
  ctx.lineTo(294.4, 199.8);
  ctx.lineTo(294.4, 338.2);
  ctx.closePath();
  ctx.fill();
  ctx.stroke();

  // capa1/Rectngulo
  ctx.shadowColor = "rgb(0, 0, 0)";
  ctx.shadowOffsetX = 0.0;
  ctx.shadowOffsetY = 7.0;
  ctx.shadowBlur = 10.0;
  ctx.beginPath();
  ctx.moveTo(613.3, 241.4);
  ctx.lineTo(334.8, 241.4);
  ctx.lineTo(334.8, 103.1);
  ctx.lineTo(613.3, 103.1);
  ctx.lineTo(613.3, 241.4);
  ctx.closePath();
  ctx.fill();
  ctx.stroke();

  // capa1/Rectngulo
  ctx.shadowColor = "rgb(0, 0, 0)";
  ctx.shadowOffsetX = 0.0;
  ctx.shadowOffsetY = 7.0;
  ctx.shadowBlur = 10.0;
  ctx.beginPath();
  ctx.moveTo(932.8, 148.2);
  ctx.lineTo(653.8, 148.2);
  ctx.lineTo(653.8, 35.9);
  ctx.lineTo(932.8, 35.9);
  ctx.lineTo(932.8, 148.2);
  ctx.closePath();
  ctx.fill();
  ctx.stroke();

  // capa1/Rectngulo
  ctx.shadowColor = "rgb(0, 0, 0)";
  ctx.shadowOffsetX = 0.0;
  ctx.shadowOffsetY = 7.0;
  ctx.shadowBlur = 10.0;
  ctx.beginPath();
  ctx.moveTo(932.8, 308.2);
  ctx.lineTo(653.8, 308.2);
  ctx.lineTo(653.8, 195.9);
  ctx.lineTo(932.8, 195.9);
  ctx.lineTo(932.8, 308.2);
  ctx.closePath();
  ctx.fill();
  ctx.stroke();
}

</script>
</head>
<body onload="init()">
  <canvas id="canvas" width="1315" height="361"></canvas>
</body>
</html>

HTML 部分的 SQL Server 存储过程中的代码如下所示:

 EXEC msdb.dbo.sp_send_dbmail
   @profile_name = 'SQL ALERTING',  
   @body = @body,
   @body_format ='HTML',
   @recipients = @@email,
   @subject = 'Test' ;

谁能帮我告诉我出了什么问题或是否有替代方法?提前致谢!

标签: sql-serverstored-procedureshtml5-canvassp-send-dbmail

解决方案


推荐阅读