邮件群发

摘要:
目前,最大电子邮件内容设置为10000字节。如果需要增加大小,请提交消息。电子邮件帐户和密码是用于批量发送的帐户和密码。2.批量发送的时间间隔默认为零。您可以选择以秒为单位填写时间间隔,以防止禁用同一内容的多次快速发送。
关于生成随机QQ邮箱不精确的问题,在之后版本打算另写一个采集器插件进行帐号采集,所以,这个软件只用来进行内容发送,邮箱进行随机生成
如果你已经有采集来的QQ号,请复制到SendList.txt 替换内容即可
可以直接复制HTML代码到邮件内容,保存即可。目前邮件内容最大设置为10000字节,如果有增大的必要,欢迎提交留言。
源码出处,可以直接打包下载工程

这是我学习后VC编程中涉及到多线程,socket,及一些WINDOWS API的宗合应用

使用说明:

一、SMTP设置

1、SMTP设置中,收件箱地址:填写邮箱地址为帐号测试邮箱,可以填写你自己的邮箱作为接收测试。打星号为必填。邮箱帐号及密码,是即将用于群发的帐号和密码

2、群发发送时间间隔,默认为零,可以选择填写发送间隔时间,单位为秒,防止多次快速发送相同内容被停用。

3、勾选邮件标题后插入系统时间,可以在标题上加上系统时间

4、导入群发列表,勾选后,可以点击群发,暂停,继续。(群发列表为程序目录中SendList.txt)如果你有邮箱采集软件,可以把彩集的邮箱地址按照格式,一行一个,放入其中),没有的话,可以点击“收件箱”页面生成随机QQ邮箱

二、邮件内容

1、填写邮件标题,邮件内容可以为纯文本,也可以是HTML代码,附件目前只支持TXT文本。

2、群发前,请测试邮件内容,是否完整。附件是否正常接收。

三、收件箱

1、收件箱中顺序生成QQ邮箱,请不要超过6位数QQ号,位数过大,生成时间过长,容易造成假死。

2、群发前,先生成QQ邮箱列表。如果你有采集邮箱帐号,可以按格式放入SendList.txt 中

版本更新说明:
3.1版本 2012-8-28

1、可增加多个附件。
2、修复标题插入日期造成程序崩溃的BUG。
3、增加发送间隔时间选项。
4、支持HTML代码
5、增加干预码
标签: <无>

源码与演示:源码出处演示出处

```java #include "stdafx.h" #include #include #include "Resource.h" #include "TabDlg1.h" #include "winsock2.h" define MAXSTRING 10000

static int flag=0; //标记是否群发
TCHAR* pTitle = NULL; //指向标题文件内容的指针
HANDLE hThread=NULL; //线程返回句柄
long i=0; //列表控件“行”计数
static long sendNum=1; //发送邮件数量

pragma comment(lib,"WSOCK32.LIB")

extern TCHAR tcRunPath[MAX_PATH]; //程序当前路径目录
extern TCHAR shortPath[MAX_PATH]; //文件路径,TAB2中的全局变量
extern TCHAR titlePath[256]; //邮件标题文件路径
extern TCHAR mtPath[256]; //邮件内容文件路径
extern TCHAR sendListPath[MAX_PATH]; //发送列表文件路径
extern BOOL attach; //是否添加了附件
extern TCHAR file[MAXSTRING]; //附件部份代码
BOOL WINAPI TAB1_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg)
{
HANDLE_MSG(hWnd, WM_INITDIALOG, TAB1_OnInitDialog);
HANDLE_MSG(hWnd, WM_COMMAND, TAB1_OnCommand);
HANDLE_MSG(hWnd,WM_CLOSE, TAB1_OnClose);
}

return FALSE;

}

BOOL TAB1_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam)
{
InitLVColumn(hwnd);
InitComboBox(hwnd);

return TRUE;

}

void TAB1_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
{

IsChecked(hwnd);         //判断勾选框是否被勾选
IsRadioChecked(hwnd);    //RADIO控件是否被选择
switch(id)
{

    case IDC_MAIL_TEST:
    {       
                 
        if(IsDlgButtonChecked(hwnd,IDC_RADIO_QQ)!=BST_CHECKED && IsDlgButtonChecked(hwnd,IDC_RADIO_163)!=BST_CHECKED)
        {
            MessageBox(hwnd,TEXT("请选择发QQ邮箱或163信箱"),"",MB_OK);
            return;
        }
        else
        {
            flag=0;
            hThread=CreateThread(NULL,0,ThreadFunc,hwnd,0,0);
             
        }
    }
    break;
    case IDC_BUTTON_START:
    {       
        if(IsDlgButtonChecked(hwnd,IDC_RADIO_QQ)!=BST_CHECKED && IsDlgButtonChecked(hwnd,IDC_RADIO_163)!=BST_CHECKED)
        {
            MessageBox(hwnd,TEXT("请选择发QQ邮箱或163信箱"),"",MB_OK);
            return;
        }
        else
        {
            flag=1;
            hThread=CreateThread(NULL,0,ThreadFunc,hwnd,0,0);
        }
    }
    break;
    case IDC_BUTTON_PAUSE:
    {           
        if(NULL!=hThread)
        {
           SuspendThread(hThread);  
        }
        else
        {
            return;
        }
    }
    break;
    case IDC_BUTTON_RESUME:
    {           
        if(NULL!=hThread)
        {
           ResumeThread(hThread);   
        }
        else
        {
            return;
        }
    }
    break;
    default:
    break;
}

}

void TAB1_OnClose(HWND hwnd)
{
EndDialog(hwnd, 0);
}

int InitLVColumn(HWND hwnd) //列表初始化设置,视图选为报表视图
{
LVCOLUMN lvColumn;
MyLVColumn MyColumn[2] = {{TEXT("编号"), 0x30, LVCFMT_CENTER},{TEXT("邮箱帐号"), 0x99, LVCFMT_CENTER}};
lvColumn.mask = LVCF_TEXT|LVCF_FMT|LVCF_WIDTH|LVCF_SUBITEM;
DWORD dwStyle =ListView_GetExtendedListViewStyle(GetDlgItem(hwnd, IDC_LIST)); //得到列表当前拓展风格
dwStyle |= LVS_EX_FULLROWSELECT; //选中某行使整行高亮(只适用与report风格的listctrl)
dwStyle |= LVS_EX_GRIDLINES; //网格线(只适用与report风格的listctrl)
// dwStyle |= LVS_EX_CHECKBOXES; //item前生成checkbox控件
ListView_SetExtendedListViewStyle(GetDlgItem(hwnd, IDC_LIST),dwStyle); //设置列表扩展风格

for(int i = 0; i < 2; i++)
{
    lvColumn.pszText = MyColumn[i].szColumnName;
    lvColumn.cx = MyColumn[i].cx;
    lvColumn.fmt = MyColumn[i].fmt;
    SendDlgItemMessage(hwnd, IDC_LIST, LVM_INSERTCOLUMN, i, (LPARAM)&lvColumn);
}
 

return 0;

}

int InitComboBox(HWND hwnd)//窗口控件初始化设置
{
HWND hwndCombo=GetDlgItem(hwnd,IDC_COMBO_SLEEPTIME);
ComboBox_InsertString(hwndCombo,-1,TEXT("0"));
ComboBox_InsertString(hwndCombo,-1,TEXT("1"));
ComboBox_InsertString(hwndCombo,-1,TEXT("2"));
ComboBox_InsertString(hwndCombo,-1,TEXT("5"));
ComboBox_InsertString(hwndCombo,-1,TEXT("10"));
ComboBox_InsertString(hwndCombo,-1,TEXT("20"));
ComboBox_SetText(hwndCombo,TEXT("0"));

SetDlgItemText(hwnd,IDC_EDIT_MAILADD,TEXT("12345678@qq.com"));
ComboBox_InsertString(GetDlgItem(hwnd,IDC_COMBO_SMTP),0,TEXT("smtp.qq.com"));
ComboBox_InsertString(GetDlgItem(hwnd,IDC_COMBO_SMTP),1,TEXT("smtp.163.com"));
ComboBox_SetText(GetDlgItem(hwnd,IDC_COMBO_SMTP),TEXT("smtp.qq.com"));
SetDlgItemText(hwnd,IDC_EDIT_MAILPORT,TEXT("25"));  
SetDlgItemText(hwnd,IDC_EDIT_USERNAME,TEXT(""));


return 1;

}

int IsChecked(HWND hwnd) //checkbox未选中的设置为只读
{
if(IsDlgButtonChecked(hwnd,IDC_CHECK_QUNFA)!=BST_CHECKED)
{
EnableWindow(GetDlgItem(hwnd, IDC_BUTTON_START), false);
EnableWindow(GetDlgItem(hwnd, IDC_BUTTON_RESUME), false);
EnableWindow(GetDlgItem(hwnd, IDC_BUTTON_PAUSE), false);
return 0;
}
else
{
EnableWindow(GetDlgItem(hwnd, IDC_BUTTON_START), true);
EnableWindow(GetDlgItem(hwnd, IDC_BUTTON_RESUME), true);
EnableWindow(GetDlgItem(hwnd, IDC_BUTTON_PAUSE), true);
return 1;
}

return 0;

}
int IsRadioChecked(HWND hwnd) //RADIO控件被选中,则设置相应的SMTP 地址
{
if(IsDlgButtonChecked(hwnd,IDC_RADIO_QQ)==BST_CHECKED)
{
ComboBox_SetText(GetDlgItem(hwnd,IDC_COMBO_SMTP),TEXT("smtp.qq.com"));
return 1;

}
if(IsDlgButtonChecked(hwnd,IDC_RADIO_163)==BST_CHECKED)
{
    ComboBox_SetText(GetDlgItem(hwnd,IDC_COMBO_SMTP),TEXT("smtp.163.com"));
    return 2;
}
return 0;

}

TCHAR* readText1(HWND hwnd) //读取文件--邮件发送内容
{
int nLen = 0;
FILE *pF = fopen(titlePath , "r"); //打开文件

fseek(pF, 0, SEEK_END);             //文件指针移到文件尾
nLen = ftell(pF);                   //得到当前指针位置, 即是文件的长度
rewind(pF);                         //文件指针恢复到文件头位置

 
pTitle = (char*) malloc(sizeof(char)*nLen+1);//动态申请空间, 为保存字符串结尾标志

免责声明:内容来源于网络,仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇PythonWeb 服务部署文档及迁移到Linux相关在WindowsXP下 VC6.0 编译安装Boost库 Step by Step CHRIS下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

FoxMail 7.2的邮件存储目录修改

FoxMail升级到7.x以后,邮件的存储路径和策略也发生了变化,许多朋友由于担心放在C盘占用空间,或者在重装系统时会丢失邮件,因此想要改变Foxmail7.2邮件存放位置,但在FoxMail的设置界面中并没有提供相应的功能,我们该怎么办呢? 通过研究,找到了两种解决方法: 一、 重新安装FoxMail 在Foxmail的安装目录下c:Program Fi...

使用 Mutt Email 客户端管理你的 Gmail

原文:http://www.guao.hk/posts/httplifehacker-com5574557how-to-use-the-fast-and-powerful-mutt-email-client-with-gmail.html 你是终端爱好者+键盘控吗?如果可以在上图这种界面中使用 Gmail,你会不会兴奋异常呢? 上图即是 mutt 这款基...

Spring Boot 发送邮件

需求 最近因为业务的变更,需要对老用户进行发送邮件处理。目前市面上也有很多代发邮件的接口,可以接入。由于量不是特别大,放弃了这个途径。改用我们自己通过 smtp 发送邮件来处理。 技术选择 Java 有原生的javax.mail 可以使用,但是比较复杂。基于我们现在项目中使用了Spring Boot,而且 Spring 提供了非常好用的 JavaMailS...

Confluence 6 计划任务

管理员控制台能够允许你对 Confluence 运行的计划任务进行计划的调整,这些计划任务将会按照你的调整按时执行。可以按照计划执行的任务如下: Confluence 站点备份 存储优化任务,清理 Confluence 的临时目录中的文件和缓存 索引优化任务,确定 Confluence 的索引能够保持与数据库同步是最新的索引 邮件队列优化任务,确保 Con...

通过QQ邮箱的SMTP服务器发送QQ邮件至163邮箱提示“发送邮件失败”的解决方案(三种可能性,不妨一试)

IDE:Visual Studio 2010[C#] + .NET 4.0框架引用.NET 4.0框架的System.Net.Mail命名空间开发发送邮件的程序。发送方:QQ邮箱 接收方:163邮箱 基于上述开发平台,以下列举了三种通过QQ邮箱的SMTP服务器发送QQ邮件至163邮箱提示“发送邮件失败”可能的解决方案。 1.QQ邮箱的SMTP服务是否正常。...

python smtp 群发邮件

最近工作中遇到使用脚本处理问题并发送结果邮件,使用python的smtp模块很简单的完成了实现。今天遇到一个问题,根据脚本的测试结果需要群发邮件,但是发送邮件的py文件只有首个地址收到了邮件。仔细排查发现个有意思的地方: 发送邮件的py大致如下: 1 def sendmail(message,to_addrs) 2 ................