我的应用程序使用的公司SMTP服务器的电子邮件大小限制为20mb。我的电子邮件失败并出现错误" [SocketException] SMTP错误:552 4.3.1邮件大小超过固定的最大邮件大小"当附件总数为14.92mb时。
目前,我的代码循环遍历附加文件并使用PHP filesize()计算文件大小,然后将其与硬编码限制20mb进行比较。它应该运行单独的代码来告诉用户文件是否太大,但是,在上面的示例中,它仍然低于限制并且它会产生一个丑陋的错误。< / p>
有没有办法衡量电子邮件,附件和所有内容的总大小?公司消息传递团队正在推迟说电子邮件必须超过20mb,我想对此进行正确测试。
我正在使用CakePHP 2.3的EmailComponent。以下是代码的简化版本:
App::uses('CakeEmail', 'Network/Email');
$email = new CakeEmail('smtp');
...
$totalAttachmentsSize = 0;
$attachments = array();
//loop array with files to be attached
foreach ($files as $file) {
$totalAttachmentsSize += filesize($file['path']);
$attachments[$file['name']] = $file['path'];
}
//compare attachments size to constant defined in bootstrap.php
if ($totalAttachmentsSize < MAX_EMAIL_SIZE) {
$email->send();
}
else {
//handle
}
答案 0 :(得分:4)
附件正在进行base64编码,这将需要更多的字节,同时将它们连接在一起需要几个字节用于其他标头和内容。
要获得确切的大小,请检查CakeEmail::send()
的返回值,它将包含呈现的标题和邮件正文。如果您不想实际发送邮件,请使用DebugTransport
。
$email->transport('Debug');
$contents = $email->send();
$data = $contents['headers'] . "\r\n\r\n"
. $contents['message'] . "\r\n\r\n\r\n.";
debug(strlen($data));
这应该为您提供SMTP传输发送邮件的确切字节数。