以CakePHP获取电子邮件大小

以CakePHP获取电子邮件大小,php,email,cakephp,Php,Email,Cakephp,我的应用程序使用公司SMTP服务器,电子邮件大小限制为20mb。我有电子邮件失败,错误为[SocketException]SMTP错误:552 4.3.1当附件总数为14.92mb时,邮件大小超过固定的最大邮件大小 目前,我的代码在附加文件中循环,并使用PHP filesize计算文件大小,然后将其与20mb的硬编码限制进行比较。它应该运行单独的代码来告诉用户文件是否太大,但是,在上面的示例中,它仍然小于限制,并且生成了一个丑陋的错误 是否有一种方法可以测量电子邮件、附件和所有内容的总大小?公司

我的应用程序使用公司SMTP服务器,电子邮件大小限制为20mb。我有电子邮件失败,错误为[SocketException]SMTP错误:552 4.3.1当附件总数为14.92mb时,邮件大小超过固定的最大邮件大小

目前,我的代码在附加文件中循环,并使用PHP filesize计算文件大小,然后将其与20mb的硬编码限制进行比较。它应该运行单独的代码来告诉用户文件是否太大,但是,在上面的示例中,它仍然小于限制,并且生成了一个丑陋的错误

是否有一种方法可以测量电子邮件、附件和所有内容的总大小?公司消息团队反驳说,电子邮件必须超过20mb,我想对此进行适当测试

我正在使用CakePHP2.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
}

附件正在进行base64编码,这将需要更多的字节,同时将它们连接在一起还需要一些字节用于额外的标题和内容

要获得确切的大小,请检查的返回值,它将包含呈现的标题和消息体。如果不想实际发送邮件,请使用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传输发送的邮件的确切字节数。

附件正在进行base64编码,这将需要更多的字节,同时将它们连接在一起还需要一些字节以用于其他标题和内容

要获得确切的大小,请检查的返回值,它将包含呈现的标题和消息体。如果不想实际发送邮件,请使用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传输发送的邮件的确切字节数。

谢谢,太好了。事实上,我的14.92mb电子邮件的发送速度超过了20mb!对于将来的读者,请记住在检查文件大小后将传输设置回SMTP:-我使用$email->config'transport'完成此操作;谢谢,太好了。事实上,我的14.92mb电子邮件的发送速度超过了20mb!对于将来的读者,请记住在检查文件大小后将传输设置回SMTP:-我使用$email->config'transport'完成此操作;