Files
stemcell/app/code/Stemcell/Datacollection/Helper/Email.php
T
2026-09-15 10:26:34 +08:00

98 lines
3.4 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
namespace Stemcell\Datacollection\Helper;
use Alekseon\CustomFormsEmailNotification\Block\Adminhtml\Form\Edit\Tab\ConfirmationEmail;
use Laminas\Mime\Message;
use Laminas\Mime\Mime;
use Laminas\Mime\Part;
use Magento\Framework\App\Helper\AbstractHelper;
use Magento\Framework\Mail\Template\TransportBuilder;
use Magento\Framework\Filesystem;
use Magento\Framework\Exception\MailException;
use Magento\Framework\Translate\Inline\StateInterface;
use Magento\Store\Model\StoreManagerInterface;
use \Magento\Framework\App\Helper\Context;
class Email extends \Magento\Framework\App\Helper\AbstractHelper
{
const FORM_RECORDS_NOTIFICATION_TEMPLATE = 'alekseon_custom_form_records_notification_email_template';
public function __construct(
private TransportBuilder $transportBuilder,
private StateInterface $inlineTranslation,
private StoreManagerInterface $storeManager,
private Filesystem $filesystem,
Context $context
) {
parent::__construct($context);
}
/**
* 发送带Excel附件的邮件
* @throws \Magento\Framework\Exception\LocalizedException
*/
public function sendEmailWithAttachment(array $recipientEmail, string $recipientName, array $excels)
{
$this->inlineTranslation->suspend();
try {
$storeId = $this->storeManager->getStore()->getId();
// 邮件变量
$templateVars = [
'emailTitle' => $recipientName,
'recordHtml' => '<p>邮件内容</p>'
];
$templateId = self::FORM_RECORDS_NOTIFICATION_TEMPLATE;
// 发件人信息(定义在 Stores > Configuration > General > Store Email Addresses)
$from = [
'email' => $this->scopeConfig->getValue('trans_email/ident_general/email'),
'name' => 'Stemcell'
];
// 创建 Transport
$transport = $this->transportBuilder
->setTemplateIdentifier($templateId)
->setTemplateOptions([
'area' => \Magento\Framework\App\Area::AREA_FRONTEND,
'store' => $storeId
])
->setTemplateVars($templateVars)
->setFromByScope($from)
->addTo($recipientEmail)
->getTransport();
$mail = $transport->getMessage();
$body = new Message();
foreach ($excels as $excel) {
if (empty($excel['content'])) {
echo $excel['title'].PHP_EOL;
}
$attachment = new Part($excel['content']);
$attachment->type = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
$attachment->disposition = Mime::DISPOSITION_ATTACHMENT;
$attachment->encoding = Mime::ENCODING_BASE64;
$attachment->filename = mb_convert_encoding($excel['title'], 'GB2312');
// $body->addPart(new Part(' '));
$body->addPart($attachment);
}
$mail->setBody($body);
$transport->sendMessage();
$this->inlineTranslation->resume();
return true;
} catch (MailException $e) {
$this->inlineTranslation->resume();
throw new \Exception(__('邮件发送失败: %1', $e->getMessage()));
}
}
}