生成带有 Excel XLSX 附件的电子邮件
Posted
技术标签:
【中文标题】生成带有 Excel XLSX 附件的电子邮件【英文标题】:Generating an email with an Excel XLSX attachment 【发布时间】:2018-12-30 09:30:09 【问题描述】:当我尝试打印整个字符串或编码部分时,以下 Perl 程序在第 44 行给出拒绝访问错误。如果我使用$msg->print_header(\*STDOUT)
仅打印标题。
我要做的是生成一个文本文件,其中包含可用于 telnet 命令的所有信息,以通过发送带有附件的电子邮件来测试 消息传输代理 (MTA) .
use MIME::Lite;
use Net::SMTP;
### Add the sender, recipient and your SMTP mailhost
my $from_address = 'temp999 at gmail.com';
my $to_address = 'test05@gmail.com';
my $mail_host = 'gmail.com';
### Adjust subject and body message
my $subject = 'Testing script';
my $message_body = "I am sending an email with an attachment";
### Adjust the filenames
my $my_file_xlsx = 'c:/temp';
my $your_file_xlsx = 'count.xlsx';
### Create the multipart container
$msg = MIME::Lite->new(
From => $from_address,
To => $to_address,
Subject => $subject,
Type => 'multipart/mixed'
) or die "Error creating multipart container: $!\n";
### Add the text for the message body
$msg->attach(
Type => 'TEXT',
Data => $message_body
) or die "Error adding the text message part: $!\n";
### Adding an Excel file
$msg->attach(
Type => 'application/octet-stream',
Path => $my_file_xlsx,
Filename => $your_file_xlsx,
Disposition => 'attachment'
) or die "Error adding $file_xls: $!\n";
### Send the Message
MIME::Lite->send('smtp', $mail_host, Timeout => 60);
#$msg->send;
$msg->print(\*STDOUT); # Write to a file handle ### LINE 44 ###
#$msg->print_header(\*STDOUT); # Write the header
#$msg->print_body(\*STDOUT); # Write the encoded body
我没有找到任何与我想要做的完全匹配的东西,但我在搜索时可能没有使用正确的术语。
【问题讨论】:
我声明了错误的行号导致错误。它应该是第 44 行。下面是我得到的确切错误。打开 c:/temp: 在 send_attachment.pl 第 44 行拒绝权限。 请edit您的问题更正任何错误并提供更多信息。 XLSX 数据的正确 MIME 类型是application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
您必须始终在您编写的每个 Perl 程序的顶部添加 use strict
和 use warnings 'all'
。
当Email::Stuffer 等更好的工具存在时,仍然看到人们使用 MIME::Lite 和 Net::SMTP 等旧模块令人沮丧。
【参考方案1】:
您正在尝试附加文件c:/temp
,它(可能)是一个目录,而不是一个文件。当 MIME::Lite 尝试将其作为文件打开以读取内容时,它会因该错误而失败。您可能打算将c:/temp/count.xlsx
传递为Path
。
【讨论】:
我同意。Filename
字段只是附件的名称,并作为收件人在保存文件时应使用的名称的提示(如果/当原始文件名不受欢迎时)。 Path
应包含发件人计算机上文件的实际名称(和可选路径)。此外,根据MIME::Lite
的文档,不鼓励使用它以支持其他库。给出的示例包括Email::MIME
、MIME::Entity
和Email::Sender
。以上是关于生成带有 Excel XLSX 附件的电子邮件的主要内容,如果未能解决你的问题,请参考以下文章
使用 Python 打开 Excel 电子表格 (.xlsx)
从 python 脚本发送时,Outlook 中的电子邮件附件名称始终为“AT00001.xlsx”而不是实际名称
如何将 Python 数据帧存储在内存中并将其作为 excel 附件发送到特定的电子邮件地址?