python接口自动化(三十)--html测试报告通过邮件发出去——中(详解)
<h2>简介</h2><p> 上一篇,我们虽然已经将生成的最新的测试报告发出去了,但是MIMEText 只能发送正文,无法带附件,因此我还需要继续改造我们的代码,实现可以发送带有附件的邮件。发送带附件的需要导入另外一个模块 MIMEMultipart。还有就是测</p>
<p>试负责人不止一个人,需要将测试报告发给多个人,也就是多个收件人。这篇主要是围绕这两个主题进行讲解的。</p>
<h2> 大致思路</h2>
<h3>(一)带有附件发送邮件</h3>
<p>1、导入模块 MIMEMultipart</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">from</span> email.mime.multipart import MIMEMultipart</pre>
</div>
<p>2、先读取要发送文件的内容,file_new 是测试报告路径的参数名</p>
<p> <img src="https://img2018.cnblogs.com/blog/1232840/201905/1232840-20190506160752555-1355662005.png" alt=""></p>
<p>3、下图红色框框 file_name 参数是发送的附件重新命名</p>
<p> <img src="https://img2018.cnblogs.com/blog/1232840/201905/1232840-20190506160925958-1146815231.png" alt=""></p>
<p>4、file_new 是测试报告路径的参数名,发送邮件是将其传入</p>
<p><img src="https://img2018.cnblogs.com/blog/1232840/201905/1232840-20190506161110654-1468373080.png" alt=""></p>
<p>5、运行结果</p>
<p><img src="https://img2018.cnblogs.com/blog/1232840/201905/1232840-20190506161619508-1173696443.png" alt=""></p>
<p>6、查看收件箱</p>
<p><img src="https://img2018.cnblogs.com/blog/1232840/201905/1232840-20190506161714682-1157232280.png" alt=""></p>
<h3>(二)发送给多个收件人</h3>
<p>上面都是发给一个收件人,那么如何一次发给多个收件人呢?其实是非常简单的,只需改两个小地方,即可,从这里就可以看出python的强大之处。<br>1、源码</p>
<p><img src="https://img2018.cnblogs.com/blog/1232840/201905/1232840-20190506163526020-257940741.png" alt=""></p>
<p>2、仿造修改</p>
<p><img src="https://img2018.cnblogs.com/blog/1232840/201905/1232840-20190507124059768-1224726427.png" alt=""></p>
<p>3、运行结果</p>
<p><img src="https://img2018.cnblogs.com/blog/1232840/201905/1232840-20190506164219402-840238446.png" alt=""></p>
<p>4、收件箱查看</p>
<p>公司邮箱</p>
<p><img src="https://img2018.cnblogs.com/blog/1232840/201905/1232840-20190506170810811-140165208.png" alt=""></p>
<p> </p>
<p> </p>
<p>QQ邮箱</p>
<p><img src="https://img2018.cnblogs.com/blog/1232840/201905/1232840-20190507124521965-1169634488.png" alt=""></p>
<p> </p>
<h2>参考代码</h2>
<div class="cnblogs_code">
<pre># coding=utf-<span style="color: rgba(128, 0, 128, 1)">8</span><span style="color: rgba(0, 0, 0, 1)">
#</span><span style="color: rgba(128, 0, 128, 1)">1</span>.先设置编码,utf-<span style="color: rgba(0, 0, 0, 1)">8可支持中英文,如上,一般放在第一行
#</span><span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(0, 0, 0, 1)">.注释:包括记录创建时间,创建人,项目名称。
</span><span style="color: rgba(128, 0, 0, 1)">'''
</span>Created on <span style="color: rgba(128, 0, 128, 1)">2019</span>-<span style="color: rgba(128, 0, 128, 1)">5</span>-<span style="color: rgba(128, 0, 128, 1)">7</span><span style="color: rgba(0, 0, 0, 1)">
@author: 北京</span>-<span style="color: rgba(0, 0, 0, 1)">宏哥
Project:学习和使用将测试报告通过邮件发出去且邮件带有附件
</span><span style="color: rgba(128, 0, 0, 1)">'''
</span>#<span style="color: rgba(128, 0, 128, 1)">3</span><span style="color: rgba(0, 0, 0, 1)">.导入unittest模块
import unittest
import os
</span><span style="color: rgba(0, 0, 255, 1)">from</span><span style="color: rgba(0, 0, 0, 1)"> email.mime.text import MIMEText
</span><span style="color: rgba(0, 0, 255, 1)">from</span><span style="color: rgba(0, 0, 0, 1)"> email.mime.multipart import MIMEMultipart
</span><span style="color: rgba(0, 0, 255, 1)">from</span><span style="color: rgba(0, 0, 0, 1)"> email.header import Header
import smtplib
#</span><span style="color: rgba(128, 0, 128, 1)">4</span><span style="color: rgba(0, 0, 0, 1)">.编写测试用例和断言
def all_case():
# 待执行用例的目录
#case_dir </span>= <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">C:\\Users\\DELL\\PycharmProjects\\honggetest\\case</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
case_dir </span>= os.path.join(os.getcwd(), <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">case</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)
testcase </span>=<span style="color: rgba(0, 0, 0, 1)"> unittest.TestSuite()
discover </span>=<span style="color: rgba(0, 0, 0, 1)"> unittest.defaultTestLoader.discover(case_dir,
pattern</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">test*.py</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
top_level_dir</span>=<span style="color: rgba(0, 0, 0, 1)">None)
# #discover方法筛选出用例,循环添加到测试套件中
# </span><span style="color: rgba(0, 0, 255, 1)">for</span> test_suit <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> discover:
# </span><span style="color: rgba(0, 0, 255, 1)">for</span> test_case <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> test_suit:
# #添加用力到testcase
# testcase.addTests(test_case)
# print(testcase)
testcase.addTests(discover)# 直接加载 discover 可以兼容python2和3
print(testcase)
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> testcase
# </span>==============定义发送邮件==========<span style="color: rgba(0, 0, 0, 1)">
def send_mail(file_new):
#</span>-----------<span style="color: rgba(128, 0, 128, 1)">1</span>.跟发件相关的参数------<span style="color: rgba(0, 0, 0, 1)">
smtpserver </span>= <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">smtp.mxhichina.com</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)"> #发件服务器
port </span>= <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)"> #端口
username </span>= <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">nXXX@ceXx.cn</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">#发件箱用户名
password </span>= <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">ceXXx@@123</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)"> #发件箱密码
sender </span>= <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">XXly@cedex.cn</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)"> #发件人邮箱
receiver </span>= [<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">hongge@com.cn</span><span style="color: rgba(128, 0, 0, 1)">'</span>,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">1918991791@qq.com</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">] #收件人邮箱
# </span>----------<span style="color: rgba(128, 0, 128, 1)">2</span>.编辑邮件的内容------<span style="color: rgba(0, 0, 0, 1)">
#读文件
f </span>= open(file_new, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">rb</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">)
mail_body </span>=<span style="color: rgba(0, 0, 0, 1)"> f.read()
f.close()
# 邮件正文是MIMEText
body </span>= MIMEText(mail_body, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">html</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">utf-8</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">)
# 邮件对象
msg </span>=<span style="color: rgba(0, 0, 0, 1)"> MIMEMultipart()
msg[</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">Subject</span><span style="color: rgba(128, 0, 0, 1)">'</span>] = Header(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">自动化测试报告</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">utf-8</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">).encode()#主题
msg[</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">From</span><span style="color: rgba(128, 0, 0, 1)">'</span>] = Header(u<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">测试机 <%s></span><span style="color: rgba(128, 0, 0, 1)">'</span>%<span style="color: rgba(0, 0, 0, 1)">sender) #发件人
msg[</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">To</span><span style="color: rgba(128, 0, 0, 1)">'</span>] = Header(u<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">测试负责人 <%s></span><span style="color: rgba(128, 0, 0, 1)">'</span>%<span style="color: rgba(0, 0, 0, 1)">receiver) #收件人
msg[</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">To</span><span style="color: rgba(128, 0, 0, 1)">'</span>] = <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">;</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">.join(receiver)
msg[</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">date</span><span style="color: rgba(128, 0, 0, 1)">'</span>] = time.strftime(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">%a,%d %b %Y %H:%M:%S %z</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)
msg.attach(body)
# 附件
att </span>= MIMEText(mail_body, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">base64</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">utf-8</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)
att[</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Content-Type</span><span style="color: rgba(128, 0, 0, 1)">"</span>] = <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">application/octet-stream</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
att[</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Content-Disposition</span><span style="color: rgba(128, 0, 0, 1)">"</span>] = <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">attachment; filename="test_report.html"</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
msg.attach(att)
# </span>----------<span style="color: rgba(128, 0, 128, 1)">3</span>.发送邮件------
<span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)">:
smtp </span>=<span style="color: rgba(0, 0, 0, 1)"> smtplib.SMTP()
smtp.connect(smtpserver)# 连服务器
smtp.login(sender, password)
except:
smtp </span>=<span style="color: rgba(0, 0, 0, 1)"> smtplib.SMTP_SSL(smtpserver, port)
smtp.login(sender, password)# 登录
smtp.sendmail(sender, receiver, msg.as_string())# 发送
smtp.quit()
# #发送邮件
# smtp </span>=<span style="color: rgba(0, 0, 0, 1)"> smtplib.SMTP()
# smtp.connect(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">smtp.mxhichina.com</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">)# 邮箱服务器
# smtp.login(username, password)# 登录邮箱
# smtp.sendmail(sender, receiver, msg.as_string())# 发送者和接收者
# smtp.quit()
print(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">邮件已发出!注意查收。</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)
# </span>======查找测试目录,找到最新生成的测试报告文件======<span style="color: rgba(0, 0, 0, 1)">
def new_report(test_report):
lists </span>=<span style="color: rgba(0, 0, 0, 1)"> os.listdir(test_report)# 列出目录的下所有文件和文件夹保存到lists
lists.sort(key</span>=lambda fn: os.path.getmtime(test_report + <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">\\</span><span style="color: rgba(128, 0, 0, 1)">"</span> +<span style="color: rgba(0, 0, 0, 1)"> fn))# 按时间排序
file_new </span>= os.path.join(test_report, lists[-<span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">])# 获取最新的文件保存到file_new
print(file_new)
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> file_new
</span><span style="color: rgba(0, 0, 255, 1)">if</span> __name__ == <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">__main__</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">:
# 返回实例
runner </span>=<span style="color: rgba(0, 0, 0, 1)"> unittest.TextTestRunner()
#导入第三方模块HTMLTestRunner
import HTMLTestReportCN
import time
# 获取当前时间,这样便于下面的使用。
now </span>= time.strftime(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">%Y-%m-%M-%H_%M_%S</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">, time.localtime(time.time()))
#保存生成报告的路径
report_path </span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">C:\\Users\\DELL\\PycharmProjects\\honggetest\\report\\</span><span style="color: rgba(128, 0, 0, 1)">"</span>+now+<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">_result.html</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
fp </span>= open(report_path,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">wb</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">)
runner </span>= HTMLTestReportCN.HTMLTestRunner(stream=<span style="color: rgba(0, 0, 0, 1)">fp,
title</span>=u<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">这是我的自动化测试用例</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
description</span>=u<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">用例执行情况</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
verbosity </span>= <span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(0, 0, 0, 1)">
)
# run 所有用例
runner.run(all_case())
#关闭文件,记住用open()打开文件后一定要记得关闭它,否则会占用系统的可打开文件句柄数。
fp.close()
#测试报告文件夹
test_path </span>= <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">C:\\Users\\DELL\\PycharmProjects\\honggetest\\report\\</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
new_report </span>=<span style="color: rgba(0, 0, 0, 1)"> new_report(test_path)
send_mail(new_report)# 发送测试报告</span></pre>
</div>
<h2>小结</h2>
<p> 1、第二处我注释掉也可以发出去,两个收件人可以收到邮件,但是如果这样的话,公司邮箱收件人只显示一个收件人,QQ邮箱显示两个收件人。</p>
<p><img src="https://img2018.cnblogs.com/blog/1232840/201905/1232840-20190507124116012-62533984.png" alt=""></p>
<p>公司邮箱 PS:如果将红色框上边的注释掉,下边的不注释,就可以看到两个收件人的邮箱</p>
<p><img src="https://img2018.cnblogs.com/blog/1232840/201905/1232840-20190507124353004-2044140686.png" alt=""></p>
<p> </p>
<p> 以下是个人愚见,如果不对请指出</p>
<div>
<blockquote>
<p>from email.mime.text import MIMEText</p>
<p>from email.mime.multipart import MIMEMultipart</p>
<p>import smtplib</p>
</blockquote>
<p>以上是导入的包,通过email和smtplib实现发邮件。</p>
<p>折腾好久,发现是这样:email中收件人和sendmail中的收件人是没啥联系的。</p>
<blockquote>
<p><strong>mail_to = ['test1@exp.com','test2@exp.com']</strong></p>
<p>server = smtplib.SMTP()</p>
<p>server.connect()</p>
<p>server.sendmail(mail_from, <strong>mail_to</strong>, msg.as_string())</p>
<p>server.quit()</p>
</blockquote>
<blockquote>
<p><strong>mail_to = 'test1@exp.com,test2@exp.com'</strong></p>
<p>msg = MIMEMultipart('related') ##采用related定义内嵌资源的邮件体</p>
<p>msgtext = MIMEText(content,_subtype='html',_charset='utf-8') ##_subtype有plain,html等格式,避免使用错误</p>
<p>msg['Subject'] = subject</p>
<p>msg['From'] = mail_from</p>
<p><strong>msg['To']</strong> =mail_to</p>
</blockquote>
<p>sendmail中收件人,它的格式应该为list。这个为实际的收件人地址。</p>
<p>而msg['To'] 格式是字符串(str)。这个只是为了邮件中打印出来而已。</p>
<p>sendmail查源码,python/lib/smtplib.py大概690行左右,或者搜索tolist。</p>
<p>2、在使用python添加附件发送时报错:Cannot attach additional subparts to non-multipart/* </p>
<p>查询得知,错误的原因在于缺少这行代码:</p>
<p>msg = MIMEMultipart() </p>
<p>将这行加上:msg = MIMEMultipart() 即可</p>
</div>
<h3> 邮件收不到的几种原因</h3>
<p>1、Subject 和正文内容不要用 hello、hehe、test 等单词</p>
<p>2、from(发件人)和 to(收件人)不要为空,(要不然会被认为是垃圾邮件)</p>
<p>3、找不到的话,先看下垃圾信箱,是不是跑到垃圾箱了</p>
<p>4、如果前几次可以收到,后来收不到了,需改下 subject 内容(因为每次都是一个 subject,系统也会拒收的,把 subject 内容设置为动态的是最好的)</p>
<p>5、部分邮箱是 ssl 加密了的,所以无法发送,如:qq 邮箱(用授权码去登录)</p>
<p>6、要是按照上面的步骤来报错了,说明代码抄错了,多检查几次。</p>
</div>
<div id="MySignature" role="contentinfo">
<div id="MySignature" style="display: block">
<div style="font-size: 13px; border: 1px dashed rgb(45, 161, 45); padding: 10px 15px; background-color: rgb(248, 248, 248)">
<label style="font-weight: bold">
为了方便大家在移动端也能看到我分享的博文,现已注册个人微信公众号,扫描左下方二维码即可,欢迎大家关注,提前解锁更多测试干货!有时间会及时分享相关技术博文。
</label>
<br>
<label style="font-weight: bold">
为了方便大家互动讨论相关技术问题,刚刚建立了咱们的专门的微信群交流互动群,群内会分享交流测试领域前沿知识。请您扫描中间的微信二维码进群
</label>
<br>
<label style="font-weight: bold">
为了方便大家互动讨论相关技术问题,现已组建专门的微信群,由于微信群满100,请您扫描右下方宏哥个人微信二维码拉你进群
<label style="font-weight: bold; color: red; font-size: 15px">
(请务必备注:已关注公众号进群)平时上班忙(和你一样),所以加好友不及时,请稍安勿躁~
</label>
,欢迎大家加入这个大家庭,我们一起畅游知识的海洋。
</label>
<br>
感谢您花时间阅读此篇文章,如果您觉得这篇文章你学到了东西也是为了犒劳下博主的码字不易不妨打赏一下吧,让博主能喝上一杯咖啡,在此谢过了!
<br>
如果您觉得阅读本文对您有帮助,请点一下左下角
“推荐”
按钮,您的
<label style="font-weight: bold; color: red; font-size: 15px">
“推荐”
</label>
将是我最大的写作动力!另外您也可以选择
【
<strong>
关注我
</strong>
】
,可以很方便找到我!
<br>
本文版权归作者和博客园共有,来源网址:
https://www.cnblogs.com/du-hong
欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利!
</div>
<div style="text-align: center; margin-top: 10px">
<p style=" font-weight: bolder; color: red; ">
公众号(关注宏哥)     
        
       
       
微信群(扫码进群)    
       
       
    
      
      客服微信
</p>
<img style="width: 200px;padding-right: 50px;" alt="个人微信公众号" src="https://img2018.cnblogs.com/common/1741949/201911/1741949-20191119095948011-608816619.png">
<img style="width: 200px;padding-right: 65px;" alt="微信群" src="https://img2024.cnblogs.com/blog/1232840/202506/1232840-20250610113707419-637869921.png">
<img style="width: 200px" alt="个人微信" src="https://img2018.cnblogs.com/common/1741949/201911/1741949-20191106101257091-849954564.png">
</div>
</div><br><br>
来源:https://www.cnblogs.com/du-hong/p/10819199.html
頁:
[1]