小编ceg*_*ult的帖子

发送数百万封电子邮件的垃圾邮件问题

我目前正在用C开发一个电子邮件服务器,最终目标是每天向数百万人发送数百万封电子邮件.许多组织都有包含大量用户的电子邮件列表,他们每周/每月等都会发送电子邮件.

最大的问题是:如何防止服务器和电子邮件被标记为垃圾邮件? 到目前为止,我见过的所有防垃圾邮件主要是处理不良配置,或者至少不需要每小时发送大量电子邮件.我还没有看到任何能够解决每小时数百万封电子邮件范围的问题.

以下是您可以做出的一些假设:

  • 发送的每封电子邮件都是合法的
  • 所有SPF记录和MX记录都是准确,最新且有效的
  • 正在使用所有其他常见的防垃圾邮件策略(反向DNS好,使用DKIM,返回地址有效等等)
  • 电子邮件是一对一的(即,我不是CC的1000个gmail地址;我正在向每个地址发送一封电子邮件)

以下是一些让我们朝着正确的方向前进的问题:

  • 我应该限制每个域每分钟发送到X封电子邮件的电子邮件数量吗?如果是这样,GMail和MailChimp等网站如何解决这个问题呢?注意:没有ISP限制; 这只是接收邮件服务器的一个问题......
  • 我应该在给定时间限制域的连接数量吗?(例如,如果我打开10/100/1000同时连接到gmail服务器,Google会认为我是垃圾邮件代理吗?)
  • 我应该接受多少次退回(地址上的5xx错误)以自动从订阅列表中删除该电子邮件?这会影响服务器的垃圾邮件评级吗?
  • 还有什么我应该或不应该做的事情?

最后注意:请记住这是一个编程问题,而不是图书馆问题 - 我不想使用别人的服务; 我们正在编写自己的原因.我正在寻找实用的编程建议.

email smtp

9
推荐指数
1
解决办法
2427
查看次数

随机数和多个srand调用

我正在编写一个程序,它将在循环中生成大量随机数.我试图让数字更难以预测(不仅是为了安全,而是为了避免多线程上的冲突).

我注意到许多文档建议srand在程序中只调用一次.例如:C中的随机数,所选答案是"作为一般规则,在程序中只调用srand()一次".

但为什么?做这样的事情为什么会这么糟糕:

int THIS_THREAD_SEED;
int randomness() {
    ++THIS_THREAD_SEED;
    int i;
    for(i=0 i<1000; i++) {
        unsigned n = rand_r(&THIS_THREAD_SEED) / RAND_MAX;
        /* do something with n */
    }
    return 0;
}

int do_something() {
    int i;
    for(i=0; i<1000; i++) {
        randomness();
    }
}
Run Code Online (Sandbox Code Playgroud)

因此,每个函数调用一次更改种子,而不是每个程序一次.这样,无论运行多少个线程,没有两个线程都会有相同的随机数列表......对吗?

更新 假设我为每个线程都有一个唯一的种子,或者在全局SEED上使用互斥锁来防止竞争条件.

c random srand

6
推荐指数
1
解决办法
2152
查看次数

如何让 Jest 记录整个错误对象?

Jest 通过以下方式缩短错误日志:

GraphQLError {
    message: 'Cannot set property \'marketCap\' of undefined',
    locations: [ { line: 3, column: 11 } ],
    path: [ 'listings' ],
    extensions: 
        { code: 'INTERNAL_SERVER_ERROR',
            exception: { stacktrace: [Array] }
        }
} 0 [
    GraphQLError {
        message: 'Cannot set property \'marketCap\' of undefined',
        locations: [ [Object] ],
        path: [ 'listings' ],
        extensions: { code: 'INTERNAL_SERVER_ERROR', exception: [Object] }
    }
]
Run Code Online (Sandbox Code Playgroud)

如何强制它打印整个错误而不是使用[Array]and [Object]

javascript node.js jestjs

5
推荐指数
2
解决办法
1914
查看次数

Valgrind changes CPUID value

Valgrind is changing the values returned by the CPUID opcode instruction. Simply put, how can I make Valgrind respect the actual CPUID instruction?

For reference, this was discovered when running into strange errors when detecting aes-ni support on an old computer which I know does not have the aes-ni instruction set. This behavior, however, is clearly changing multiple values.

This behavior can be observed with valgrind-3.10.1, using the following C code:

#include <stdio.h>

int main() {
        unsigned eax, …
Run Code Online (Sandbox Code Playgroud)

c valgrind cpuid

3
推荐指数
1
解决办法
638
查看次数

获取正在运行的头盔版本的当前配置?

假设我最近安装或升级了头盔版本,例如:

helm upgrade ... config.yaml ...
Run Code Online (Sandbox Code Playgroud)

我有什么方法可以config.yaml通过头盔CLI 检索?我需要验证配置值。

kubernetes kubernetes-helm

3
推荐指数
1
解决办法
809
查看次数

如何检查module属性是否为Class

我正在使用imp.find_module然后imp.load_module加载'example',现在我想要列出只是函数example.py的函数,Class A但是我似乎无法找到getattrClasses特有的属性,它会过滤掉所有其他方法dir(example).

for i in dir(example):
    if hasattr(getattr(example, i), <some_attribute>):
        print i
Run Code Online (Sandbox Code Playgroud)

python

2
推荐指数
1
解决办法
451
查看次数

malloc和范围

我正在努力将我的脑袋包裹在c中的malloc - 特别是当它需要自由()时.我在gcc中遇到奇怪的错误,例如:

... free(): invalid next size (fast): ...

当我尝试释放一个char指针.例如,从输入文件读取时,在执行以下操作时,它将在某些行上崩溃:

FILE *f = fopen(file,"r");
char x[256];
while(1) {
    if(fgets(x,sizeof x,f)==NULL) break;
    char *tmp = some_function_return_char_pointer(x); //OR malloc(nbytes);
    // do some stuff
    free(tmp); // this is where I get the error, but only sometimes
}
Run Code Online (Sandbox Code Playgroud)

我检查了明显的事情,比如x是NULL,但事实并非如此; 它只会在随机线路上崩溃.

但我真实的问题是 - 我什么时候需要使用free()?或者,可能更准确,我何时不应该免费使用?如果malloc在函数中,我返回使用malloc()的var怎么办?在for或while循环中怎么样?对于一个struct数组,mallocing是否与string/char指针具有相同的规则?

我收集了程序崩溃时我遇到的错误,我只是不理解malloc和free.我和Google一起度过了愉快的时光,而且我还在打砖墙.你找到了什么好的资源吗?我看到的一切都说每当我使用malloc时我都需要免费使用.但后来我尝试了,我的程序崩溃了.那么根据变量的范围可能有所不同?当在其中声明变量时,C是否在循环结束时释放内存?在功能结束时?

所以:

for(i=0;i<100;i++) char *x=malloc(n); // no need to use free(x)?
Run Code Online (Sandbox Code Playgroud)

但:

char *x;
for(i=0;i<100;i++) {
    x=malloc(n);
    free(x); //must do this, since scope of x greater than loop?
} …
Run Code Online (Sandbox Code Playgroud)

c malloc scope

1
推荐指数
1
解决办法
2667
查看次数

浏览器添加空代码标记

你可以在这个jsFiddle中看到我的问题.

我尝试使用code标签来区分特殊内容,但这很快就适用于我(正如您在上面的链接中看到的那样).当我使用Firebug查看内容时,这个:

<code>
    <p> Some line of code </p>
    <p> Another line of code </p>
</code>
Run Code Online (Sandbox Code Playgroud)

变成了这个:

<p>
    This is a sample paragraph with a code block:
    <code> </code>
</p>
<p>
    <code> Some line of code </code>
</p>
<code>
    <p> Another line of code </p>
</code>
Run Code Online (Sandbox Code Playgroud)

现在,这可以通过更改<code><div class="code">(如此jsFiddle中所示)来解决,但为什么浏览器首先执行此操作,为什么它只对每个段落的第一部分执行此操作?

Firefox,Opera,Chrome,Internet Explorer,Safari - 所有这些都是这样做的,但我真的很想知道原因.它code只会发生,还是会与其他标签一起发生?为什么浏览器会像这样移动标签?

html css browser

1
推荐指数
1
解决办法
198
查看次数