标签: swiftmailer

SwiftMailer 库执行缓慢

我正在尝试将 swiftmailer 实施到这个邮件系统中。我的客户有大约 30 万封活动电子邮件需要半定期发送。该系统最初是为 sendmail 和 php 的 mail() 函数配置的。我已经安装了最新版本的 postfix。

可能是我的期望太高了,但我的印象是这个东西可以快速将大量电子邮件放入队列中,这正是我所需要的。所有的速率处理和节流都是在 postfix 端完成的,所以能够以我的 postfix 设置可以处理的速度将它们排队会很棒。

虽然我可以实现将联系人直接插入队列的方法,但我宁愿根据各种选项(例如 smtp 服务器的全局发送速率)来限制进入队列的电子邮件的输入。

下面的代码只是一些基本的测试。它遍历 30 个单独的邮件 smtp 帐户,每个帐户都有自己的费率属性。我正在尝试从每个 cron 的数据库中提取最大数量的电子邮件,然后发送然后全部使用batchsend(),然后循环到下一个 smtp 帐户,发送最大值等。

从技术上讲它确实有效,但是它真的很慢。以每个 smtp 帐户 60/分钟的速度,每个大约需要 15-20 秒,这显然不起作用,而且完全不是我所期望的。

为什么这会发送这么慢有什么很明显的吗?smtp 服务器似乎很好,没有过载或类似的情况。没有后缀错误,没有什么明显的。

一旦电子邮件进入队列,我就让 postfix 工作,这很神奇。以合理的速度将其放入队列变得困难。我知道 swiftmailer 是解决我所有问题的神奇解决方案,但我确信它的发送速度应该比现在更快。有什么想法或建议吗?

$query = "SELECT * FROM `smtp`";
    $result = mysql_query($query) or die(mysql_error());
    $num_rows1 = mysql_num_rows($result);
    while($row = mysql_fetch_array($result)){
        $smtp = $row['ip'];
        $login = $row['user'];
        $pass = $row['pass'];
        $smtp_domain = $row['domain'];   

    $querya = "SELECT * FROM `mailer_lists` ml …
Run Code Online (Sandbox Code Playgroud)

php email postfix-mta swiftmailer

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

通过Google/Gmail而不是从我的服务器发送电子邮件的优点与缺点

我已经在堆栈上阅读了很多关于想要更改邮件类(即swiftmailer)以使用他们的Google Apps服务器/电子邮件地址向SMTP发送电子邮件的人的问题.

我能看到的唯一真正的好处是副本放在Gmail的已发送文件夹中.我现在克服了这个问题(没有SMTP),只需从我的服务器发送一封电子邮件,以保留所有内容的副本(即mail@whatever.com).

通过Gmail的SMTP服务器发送垃圾邮件是否有帮助,或者说"Google不认为这是由此服务器发送的"?还有什么我忽略的吗?

谢谢大家.

(是的,我的域名是由Google Apps托管的,用于电子邮件/日历/等等... MX记录已全部设置且功能正常).

php email gmail swiftmailer google-apps

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

swiftmailer Swift_TransportException被try-catch块无法捕获

对于一个项目(涉及房地产)我已经包括一个联系表格,如果访客有兴趣购买/租用房地产,访客可以联系房地产经纪人.

我正在使用Symfony2及其库.对于联系邮件,我使用的是Swiftmailer库.好吧,我有下一个处理表单提交的代码.在那里,我创建了一个邮件对象,以便能够发送邮件.它工作,但我想提供一个错误解决服务,如果发送器/接收器的smtp主机有问题.

这是代码,

$data = $contactForm->getData();
try {
    // create body text
    $body = $app['twig']->render('mailTemplate.twig', array('data' => $data, 'immoid' => $immoID));
    // set mail
    $mail = \Swift_Message::newInstance()
        ->setSubject('Contact reaction on your immo offer.')
        ->setFrom($app['swiftconfig']['sender'])
        ->setTo($contactinfo['contactmail'])
        ->setBody($body, 'text/html');
    // send mail
    $app['mailer']->send($mail);
    // redirect if successfull
    $app->redirect($app['url_generator']->generate('immoDetail', array('immoID' => $immoID)));
}
catch (Swift_TransportException $STe) {
    // logging error
    $string = date("Y-m-d H:i:s")  . ' - ' . $STe->getMessage() . PHP_EOL;
    file_put_contents("errorlog.txt", $string, FILE_APPEND);
    // send error note to user
    $errorMsg = …
Run Code Online (Sandbox Code Playgroud)

php swiftmailer symfony

5
推荐指数
4
解决办法
1万
查看次数

使用PHP SwiftMailer和SMTP发送简报

我每天都会向大约20K的收件人发送简报.移动到其他服务器后,我需要大约六倍的时间使用相同的PHP脚本 - 我尝试了许多不同的设置,但没有运气(请看这篇文章).电子邮件服务器似乎已正确配置(关于垃圾邮件,中继和病毒),服务器运行Plesk 11.5.30.

做了很多实验,改变了PHP脚本和Postfix设置,我能够通过以下方式获得最佳性能:

  1. 使用SwiftMailer从PHP发送电子邮件.
  2. 使用SMTP(本地帐户)作为传输.
  3. 将收件人列表分为四个部分,并为每个部分启动单独的PHP-CLI过程.

当我只启动一个进程时,PHP发送大约5封电子邮件/秒(当我使用mail()函数发送电子邮件时大致相同).Postfix在"动态"发送它们没有问题,所以没有队列.

当我开始四个进程时,PHP发送大约10封电子邮件/秒,但是后缀不再能够"动态"发送它们(它只能发送大约5封电子邮件/秒),因此队列变得越来越大.当PHP进程结束时,我的队列中有大约4500封电子邮件.这里有一个有趣的部分:当没有更多活跃的PHP进程发送电子邮件时,Postfix"加速"发送大约20封电子邮件/秒.当PHP发送新电子邮件时,Postfix是否能够以此速率发送电子邮件?没有队列,它会解决我的问题.

我很感激我能做些什么来改善我的脚本和服务器发送新闻通讯的性能.

这是Postfix配置:

root@hostname:~# postconf -n 
alias_database = hash:/etc/aliases 
alias_maps = hash:/etc/aliases, hash:/var/spool/postfix/plesk/aliases 
append_dot_mydomain = no 
biff = no 
config_directory = /etc/postfix 
disable_vrfy_command = yes 
inet_interfaces = all 
inet_protocols = ipv4 
mailbox_size_limit = 0 
mailman_destination_recipient_limit = 1 
message_size_limit = 51200000 
mydestination = (none), localhost, localhost.localdomain, localhost 
mydomain = domain.com 
myhostname = myhostname.com 
mynetworks = 127.0.0.0/8 [::1]/128 my.ip.add.ress 
plesk_virtual_destination_recipient_limit = 1 
readme_directory = no 
recipient_delimiter = + 
relayhost = 
sender_dependent_default_transport_maps …
Run Code Online (Sandbox Code Playgroud)

php email postfix-mta newsletter swiftmailer

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

使用 SWIFTMAIL 发送 base64 电子邮件

我只是想让我的多部分电子邮件用 base64 编码并通过 swiftmail 发送。这是我到目前为止的代码:

$message = Swift_Message::newInstance("Email Template Test")
    ->setBoundary($boundary)
    ->setFrom(array('no-reply@domain.net' => 'Mailer Service'))
    ->setTo(array("a@d.com","a@b.com"))
    ->setBody($plaintext)
    ->addPart($htmlmail,"text/html");

$headers = $message->getHeaders();
$headers->addTextHeader('Content-Transfer-Encoding','base64');

$contenttype = $message->getHeaders()->get('Content-Type');
$contenttype->setValue('multipart/alternative');
Run Code Online (Sandbox Code Playgroud)

据我从文档中看到(我不太清楚),Content-Transfer-Encoding标题是一个文本标题,所以我应该能够像上面那样设置它。在此之前,我运行了所有当前标题的输出,并且Content-Transfer-Encoding没有在那里列出,因此需要设置它。因此为什么在上面的代码中我试图设置它。

输出很好,我收到了电子邮件,它们可以工作,但是当我查看源代码时,它们没有被编码。我已尝试使用上述相同的代码,但更改$plaintextbase64_encode($plaintext),但刚刚收到编码的消息。怎么做的>

php swiftmailer

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

Symfony 2 Swiftmailer + Amazon SES:无法使用2个可能的身份验证器在用户名为"XXXXXXXXXXXXXXXX"的SMTP服务器上进行身份验证

我知道之前已经提出过这个问题,但任何给定的响应都已经成为Symfony2 + Swiftmailer + Amazon SES的解决方案.

我在Symfony2中设置了Swiftmailer的Amazon SES帐户详细信息,所有信息都是正确的,用户名和密码.然而,由于一些奇怪的原因,我没有赶上Symfony2 Swiftmailer在发送电子邮件时丢失了这个错误.

Failed to authenticate on SMTP server with username "XXXXXXXXXXXXXXXX" using 2 possible authenticators
Run Code Online (Sandbox Code Playgroud)

这是我在config.yml中得到的

#app/config/config.yml

# Swiftmailer Configuration
swiftmailer:
    transport: "%mailer_transport%"
    host:      "%mailer_host%"
    port:      "%mailer_port%"
    encryption: "%encryption%"
    username:  "%mailer_user%"
    password:  "%mailer_password%"
Run Code Online (Sandbox Code Playgroud)

和parameters.yml

#app/config/parameters.yml

parameters:
    database_driver: pdo_mysql
    database_host: 127.0.0.1
    database_port: null
    database_name: mydatabase
    database_user: dbuser
    database_password: dbpass
    mailer_transport: smtp
    mailer_host: email-smtp.us-east-1.amazonaws.com
    mailer_port: 587
    encryption: tls
    mailer_user: XXXXXXXXXXXXXXXX
    mailer_password: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    mailer_from: support@mycompany.com
    locale: en
    secret: ThisTokenIsNotSoSecretChangeIt
    debug_toolbar: true
    debug_redirects: false
    use_assetic_controller: true
Run Code Online (Sandbox Code Playgroud)

放置Gmail …

email swiftmailer amazon-web-services symfony amazon-ses

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

Swiftmailer捕获异常:预期响应代码250但得到代码"",带有消息""

我在symfony 1.4 swiftmailer遇到了麻烦.当我尝试使用sendmail函数()时,我收到错误代码:

Caught exception: Expected response code 250 but got code "", with message ""
Run Code Online (Sandbox Code Playgroud)

并且symfony不发送消息.

下面是我的函数sendmail

static function sendmail($mail, $textmessage, $subject) {
    try {
        $message = Swift_Message::newInstance()
                ->setFrom(sfConfig::get('app_mail_address_from'))
                ->setTo($mail)
                ->setSubject($subject)
                ->setBody($textmessage)
                ->setContentType("text/html");
      //  sfContext::getInstance()->getMailer()->send($message);
      sfContext::getInstance()->getMailer()->send($message);
    //   mail("mymailcom", "A subject", "A message", "FROM: noreply@mail.com");

    } catch (Exception $e) {
        echo 'Caught exception: ', $e->getMessage(), "\n";
    }


}
Run Code Online (Sandbox Code Playgroud)

我试图做的:

  1. 我试着测试mail()函数.它运作良好.

  2. 我试图将smtp设置更改为gmail帐户 - 无法正常工作

我的服务器是:godaddy.co.uk服务器上的CentOs6

有人可以帮我解决这个错误吗?

php swiftmailer symfony-1.4

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

Symfony 2和Swiftmailer不使用文件假脱机

我无法让文件假脱机与Symfony 2和Swiftmailer一起正常工作.

这是我的配置

# Swiftmailer Configuration
swiftmailer:
    transport:      %mailer_transport%
    host:           %mailer_host%
    username:       %mailer_user%
    password:       %mailer_password%
    spool:
        type: file
        path: '%kernel.root_dir%/spool'
    port:           %mailer_port%
    encryption:     %mailer_encryption%
    sender_address: %mailer_sender_address%
Run Code Online (Sandbox Code Playgroud)

当我发送电子邮件时,会在app/spool/default /中创建一个文件

然后我跑了

php app/console swiftmailer:spool:send
Run Code Online (Sandbox Code Playgroud)

得到这个回应

[2015-12-29 18:54:40] Processing default mailer... 1 emails sent
Run Code Online (Sandbox Code Playgroud)

所以它看起来有效,但没有发送任何内容,并且/var/log/mail.log没有显示任何新的电子邮件.

当我将配置设置为内存假脱机时,电子邮件工作没有任何问题,我更改的是config.yml

swiftmailer:
    spool: { type: memory }
Run Code Online (Sandbox Code Playgroud)

变成

swiftmailer:
    spool:
        type: file
        path: '%kernel.root_dir%/spool'
Run Code Online (Sandbox Code Playgroud)

我正在使用sendgrid和postfix实际发送电子邮件,但我不确定电子邮件是否甚至到了postfix,所以这可能没有任何区别.

swiftmailer symfony symfony-2.7

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

Laravel SwiftMailer:预期响应代码250,但代码为"530",消息"530-5.5.1需要验证

我正在使用laravel 5.2,并使用Swift Mailer进行密码重置. 我在我的Gmail上有两步验证..

正如谷歌的帮助所说:


如果您为帐户启用了两步验证,则可能需要输入应用密码而不是常规密码.


我有以下设置mail.php:

return [
    'driver' => env('MAIL_DRIVER', 'smtp'),
    'host' => env('MAIL_HOST', 'smtp.gmail.com'),
    'port' => env('MAIL_PORT', 465),
    'from' => ['address' => 'meaprogrammer@gmail.com', 'name' => 'Shafee'],
    'encryption' => env('MAIL_ENCRYPTION', 'ssl'),
    'username' => env('meaprogrammer@gmail.com'),
    'password' => env('MY_Gmail_API_KEY'),
    'sendmail' => '/usr/sbin/sendmail -bs',
    'pretend' => env('MAIL_PRETEND', false),

];
Run Code Online (Sandbox Code Playgroud)

.env我有:

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=465
MAIL_USERNAME=meaprogrammer@gmail.com
MAIL_PASSWORD=MY_Gmail_API_KEY
MAIL_ENCRYPTION=ssl
Run Code Online (Sandbox Code Playgroud)

出现以下错误:

Swift_TransportException in AbstractSmtpTransport.php line 383:

Expected response code 250 but got code "530", with message "530-5.5.1 Authentication Required. 

Learn …
Run Code Online (Sandbox Code Playgroud)

php swiftmailer laravel laravel-5.2

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

Laravel邮件奇怪的超时错误

我有很多问题了。

我的应用程序正在向客户发送邮件。
在过去的几个月中,我已将此应用程序迁移到Laravel(当前为5.4)。
很多时候我收到错误:

Swift_TransportException in AbstractSmtpTransport.php line 404:
Connection to my-smtp.company.com:25 Timed Out
Run Code Online (Sandbox Code Playgroud)

问题是我无法摆脱此错误消息。
它发生在大约10%的情况下-或实时发送排队的任务和邮件。
奇怪的是,这些邮件实际上是发送出去的,但还是会出现错误。

我正在使用Windows服务器,并通过这种方式对正在运行侦听器的排队邮件:

D:\php-7.1.1-x64\php.exe D:\wwwroot\myapp\artisan queue:listen --timeout=60 --tries=1
Run Code Online (Sandbox Code Playgroud)

我进行了一些测试,看起来当引发错误时,它总是在触发队列作业或在浏览器中执行代码后的33-36秒之后。

将max_execution_time时间更改为60秒,但这没有帮助。

有人可以帮助我吗?

php swiftmailer laravel laravel-5 php-7

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