You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Perl动态生成HTML表格 解决CSV转表格仅显示末行问题

问题原因
  • 核心错误:遍历CSV每一行的循环中,每次都直接给$message变量重新赋值,没有拼接历史内容,循环执行完后变量只会保留最后一行的内容。
  • 其余会导致功能异常的问题:
    • 开启use strict严格模式后,$subject、@output、$message等变量未通过my声明,运行时会直接抛出语法错误
    • 生成的表格行片段没有外层<table>标签包裹,邮件客户端无法正常渲染为标准表格
    • 你提供的CSV示例实际为多空格分隔格式,原代码用逗号作为分隔符无法正确拆分每列内容
    • 已经引入LWP::Simple网络请求模块,无需额外调用系统curl命令拉取文件,使用模块原生方法兼容性更好
    • 未指定HTML内容的编码,特殊字符容易出现乱码
修正后代码
#!/usr/bin/perl
use strict;
use warnings;

use LWP::Simple;
use POSIX qw(strftime);
use MIME::Lite;
use Getopt::Long;

my $to = "pankajdustbin\@gmail.com";
my $from = "pankajdustbin\@gmail.com";
my $subject = "CSV File";

# 替换为实际CSV文件的URL地址
my $content = get("https://csvfile.com/actual-csv-path");
die "拉取CSV文件失败" unless defined $content;

my @output = split(/\n/, $content);
# 初始化表格,添加基础边框、内边距样式提升邮件里的可读性
my $message = "<table border='1' cellpadding='6' cellspacing='0'>";

foreach my $line (@output) {
    chomp $line;
    next if $line =~ /^\s*$/; # 跳过空行
    # 分隔符根据实际CSV格式选择:逗号分隔用下一行注释的写法,多空格分隔用当前写法
    # my ($col1, $col2, $col3, $col4, $col5, $col6) = split(/\s*,\s*/, $line);
    my ($col1, $col2, $col3, $col4, $col5, $col6) = split(/\s{2,}/, $line);
    # 用 .= 操作符拼接每一行的表格内容,而非直接覆盖
    $message .= "<tr>
        <td>$col1</td>
        <td>$col2</td>
        <td>$col3</td>
        <td>$col4</td>
        <td>$col5</td>
        <td>$col6</td>
    </tr>";
}

$message .= "</table>"; # 闭合表格标签

my $msg = MIME::Lite->new(
        From => $from,
        To => $to,
        Subject => $subject,
        Data => $message
);

# 设置HTML内容类型并指定UTF-8编码,避免乱码
$msg->attr('content-type' => 'text/html; charset=utf-8');
# 需要走指定SMTP服务发信时,解开下方注释并配置对应邮箱的SMTP参数
# MIME::Lite->send("smtp", "你的SMTP服务器地址", Port => 465, AuthUser => $from, AuthPass => "你的邮箱授权码");
$msg->send;

注意:如果你的CSV内容里存在包含逗号的字段(比如引号包裹的文本列),不要自己手写split逻辑,引入Text::CSV模块解析CSV会更严谨,避免列拆分错位。

内容的提问来源于stack exchange,提问作者Pankaj Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 21:48:18