Yii Swiftmailer 发送中文附件

所用的是Yii2 的basic框架。它本身集成了邮件发送插件swiftmailer,发送邮件是很方便的,但是当发送的邮件带有中文名称的附件时,就出现了问题,邮件所带的附件显示名称错误。比如原名“测试.doc”的附件,发出来后看到的名字只有“.doc”。

这是因为swiftmailer中使用的一个basename()函数不支持中文。

对于basic版本框架,路径在/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Attachment.php这份文件中的setFile()方法,

将原来的:

$filename = basename($file->getPath());

修改为:

$basename = explode("/", $file->getPath());

$filename = iconv("gbk", "utf-8", end($basename));

原意是通过basename获取发送的附件名称,现在使用另一种方式获取发送附件的名称。

因为需要修改文件所处路径较深,所以建议使用IDE的全局搜索“basename”。

其实不论是什么样的PHP代码,当涉及到类似问题,就是:中文不显示或中英文混合情况下只显示了英文,都可以考虑使用全局搜索“basename”。看看是不是某段程序中使用了这个不支持中文的函数。

时间: 2024-10-10 07:13:55

Yii Swiftmailer 发送中文附件的相关文章

Java发送带附件的QQ邮箱

由于腾讯公司给QQ邮箱增加了一个授权码的密码保护,导致之前网上很多代码都不能用,于是就自己敲了一份demo. 注意在密码那里可能需要授权码,具体设置:http://service.mail.qq.com/cgi-bin/help?id=28 jar:javax.mail.jar 1 package xhw; 2 3 import java.io.BufferedReader; 4 import java.io.BufferedWriter; 5 import java.io.File; 6 im

使用Spring发送带附件的电子邮件(站内和站外传送)

JavaMail的介绍 JavaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口.它是Sun发布的用来处理email的API.它可以方便地执行一些常用的邮件传输.   虽然JavaMail是Sun的API之一,但它目前还没有被加在标准的java开发工具包中(Java Development Kit),这就意味着你在使用前必须另外下载JavaMail文件.除此以外,你还需要有Sun的JavaBeans Activation Framework (JAF).JavaBeans Activa

[Zend Mail]发送中文名附件出现乱码解决方案

Zend Framework 1.0.* “=?UTF-8?B?”.base64_encode($title).“?=” 发送中文名附件,结果如图: 英文名附件,结果截图: 解决办法就是将中文文件名拼接为““=?UTF-8?B?”.base64_encode($title).“?=”” , 然后发送即可. <?php // Notice: Zend Mail 代码是基于 zend framework 1.0.* 版本,zend framework 2.0 中发生改变 $title = "[

用commons-email,javax.mail发送邮件,中文附件名乱码。

import java.io.UnsupportedEncodingException; import javax.mail.internet.MimeUtility; import org.apache.commons.mail.EmailAttachment; import org.apache.commons.mail.EmailException; import org.apache.commons.mail.MultiPartEmail; public class MailTest {

Servlet向客户端发送中文数据的编码情况

(更多内容请关注本人微信订阅号:it_pupil) 本文讲述服务端servlet向客户端浏览器发送中文数据的编码情况,需要抓住下面几点: 输出流发送数据,必须是以字节形式传输的.也就是说,如果你在服务端定义一个字符串,那么servlet要先编码成字节数组,再发送到客户端. 客户端浏览器在收到字节码数据时,需要将其解码成字符串显示出来. 在服务端,如果你使用的是字节流,那么只需要注意两点:  拿到字符串,以特定形式编码成字节数组(如UTF-8).(字节数组是你人工转换的) 告诉浏览器,以相同方式解

Android上发送带附件的邮件

准备工作-下载最新版本的JMail https://java.net/projects/javamail/pages/Home#Download_JavaMail_1.5.2_Release http://www.oracle.com/technetwork/java/javase/downloads/index-135046.html 在android上发送邮件方式: 第一种:借助GMail APP客户端,缺点是必须使用GMail帐号,有点是比较方便 不需要写很多代码,但是不是很灵活. 第二种

ADB 发送中文短信

最近好多朋友说adb 不支持发送中文的短信,也不知道为啥要用adb 来发送短信,昨天想到这个问题,所以修改了一下自己的adb,支持发送中文的短信了. adb shell am start -a android.intent.action.SENDTO -d sms:10086 --es sms_body 中文 下载地址: http://bcs.duapp.com/myandroidtools/AndroidAdb.exe 只公开可执行程序,不公开源代码,喷子们看清楚,不要乱喷. 需要更详细的可以

redmine 中文附件下载文件找不到

/redmine/app/views/attachments/_links.html.erb 找到 <p><%= link_to_attachment attachment, :class => 'icon icon-attachment', :download => true -%> 替换为 <p><%= link_to attachment.filename, attachment_path(attachment) , :class => '

Python2.7 smtplib发送带附件邮件报错STARTTLS解决方法

最近在SIOMP系统中添加一项功能时,即自动发送带附件邮件到指定邮箱时,发现在发送时报错:错误信息:STARTTLS extension not supported by server.很是奇怪,但发送无附件邮件时,可以正常发送,且不报错,前期以为是代码存在问题,如果调出对应的错误信息反馈,似乎和代码没有什么关系: 详细代码如下所示: # -*- coding: utf-8 -*- import email from email.mime.text import MIMEText from em