Commit ef87d54f36d944e4877a61d848e3b1cf504e18cb

Authored by Mihail
1 parent 42078ac6

add MailAttachmentSaver class

backend/controllers/RgGrupController.php
@@ -11,6 +11,7 @@ namespace backend\controllers; @@ -11,6 +11,7 @@ namespace backend\controllers;
11 use backend\components\base\BaseController; 11 use backend\components\base\BaseController;
12 use backend\models\UploadFileRgForm; 12 use backend\models\UploadFileRgForm;
13 use common\components\CustomVarDamp; 13 use common\components\CustomVarDamp;
  14 +use common\components\parsers\MailAttachmentsSaver;
14 use common\models\Margins; 15 use common\models\Margins;
15 use common\models\MarginsGroups; 16 use common\models\MarginsGroups;
16 use yii\filters\AccessControl; 17 use yii\filters\AccessControl;
@@ -188,8 +189,15 @@ class RgGrupController extends BaseController @@ -188,8 +189,15 @@ class RgGrupController extends BaseController
188 189
189 return $this->render('index', ['model' => $configuration]); 190 return $this->render('index', ['model' => $configuration]);
190 191
191 -  
192 } 192 }
193 193
194 } 194 }
195 -}  
196 \ No newline at end of file 195 \ No newline at end of file
  196 +
  197 + public function actionMail()
  198 + {
  199 + //$mail_saver = new MailAttachmentsSaver('{imap.gmail.com:993/imap/ssl/novalidate-cert/norsh}Inbox', 'mt@soft-terra.com.ua', 'Wehrfyjd8');
  200 + $mail_saver = new MailAttachmentsSaver('{imap.gmail.com:993/imap/ssl/novalidate-cert}', 'price@italauto.com.ua', '67853562');
  201 + $mail_saver->saveAttachmentsTo();
  202 + }
  203 +
  204 +}
backend/views/rg-grup/index.php
@@ -29,5 +29,6 @@ $button_label = 'Прочитать'; @@ -29,5 +29,6 @@ $button_label = 'Прочитать';
29 29
30 <?php ActiveForm::end() ?> 30 <?php ActiveForm::end() ?>
31 </div> 31 </div>
  32 + <?= Html::a('Почта', ['rg-grup/mail'], ['class' => 'btn btn-primary', 'name' => 'Mail',]) ?>
32 </div> 33 </div>
33 34
common/components/parsers/MailParser.php renamed to common/components/parsers/MailAttachmentsSaver.php
@@ -9,21 +9,29 @@ @@ -9,21 +9,29 @@
9 namespace common\components\parsers; 9 namespace common\components\parsers;
10 10
11 11
12 -class MailParser {  
13 - public static function requestAction(){  
14 - $hostname = '{imap.gmail.com:993/imap/ssl/novalidate-cert/norsh}Inbox';  
15 - $username = 'сюда твой логин';  
16 - $password = 'сюда твой пароль'; 12 +use common\components\CustomVarDamp;
  13 +
  14 +class MailAttachmentsSaver
  15 +{
  16 +//$hostname = '{imap.gmail.com:993/imap/ssl/novalidate-cert/norsh}Inbox';
  17 + protected $connection;
  18 +
  19 + public function __construct($hostname, $username, $password)
  20 + {
  21 + $this->connection = imap_open($hostname, $username, $password);
  22 + CustomVarDamp::dumpAndDie( $this->connection);
  23 + if ($this->connection === false)
  24 + throw new \Exception('Cannot connect to Gmail: ' . imap_last_error());
  25 + }
17 26
18 - /* try to connect */  
19 - $inbox = imap_open($hostname,$username,$password) or die('Cannot connect to Gmail: ' . imap_last_error());  
20 27
  28 + public function saveAttachmentsTo()
  29 + {
21 30
22 - $emails = imap_search($inbox,'FROM forallthings'); 31 + $emails = imap_search($this->connection, 'FROM forallthings');
23 32
24 /* if emails are returned, cycle through each... */ 33 /* if emails are returned, cycle through each... */
25 - /* if emails are returned, cycle through each... */  
26 - if($emails) { 34 + if ($emails) {
27 35
28 /* begin output var */ 36 /* begin output var */
29 $output = ''; 37 $output = '';
@@ -31,16 +39,12 @@ class MailParser { @@ -31,16 +39,12 @@ class MailParser {
31 /* put the newest emails on top */ 39 /* put the newest emails on top */
32 rsort($emails); 40 rsort($emails);
33 41
34 -  
35 foreach ($emails as $email_number) { 42 foreach ($emails as $email_number) {
36 43
37 /* get information specific to this email */ 44 /* get information specific to this email */
38 - $overview = imap_fetch_overview($inbox, $email_number, 0);  
39 - $message = imap_fetchbody($inbox, $email_number, 2);  
40 - $structure = imap_fetchstructure($inbox, $email_number);  
41 -  
42 -  
43 - 45 +// $overview = imap_fetch_overview($inbox, $email_number, 0);
  46 +// $message = imap_fetchbody($inbox, $email_number, 2);
  47 + $structure = imap_fetchstructure($this->connection, $email_number);
44 48
45 $attachments = array(); 49 $attachments = array();
46 if (isset($structure->parts) && count($structure->parts)) { 50 if (isset($structure->parts) && count($structure->parts)) {
@@ -70,36 +74,37 @@ class MailParser { @@ -70,36 +74,37 @@ class MailParser {
70 } 74 }
71 75
72 if ($attachments[$i]['is_attachment']) { 76 if ($attachments[$i]['is_attachment']) {
73 - $attachments[$i]['attachment'] = imap_fetchbody($inbox, $email_number, $i + 1); 77 + $attachments[$i]['attachment'] = imap_fetchbody($this->connection, $email_number, $i + 1);
74 if ($structure->parts[$i]->encoding == 3) { // 3 = BASE64 78 if ($structure->parts[$i]->encoding == 3) { // 3 = BASE64
75 $attachments[$i]['attachment'] = base64_decode($attachments[$i]['attachment']); 79 $attachments[$i]['attachment'] = base64_decode($attachments[$i]['attachment']);
76 } elseif ($structure->parts[$i]->encoding == 4) { // 4 = QUOTED-PRINTABLE 80 } elseif ($structure->parts[$i]->encoding == 4) { // 4 = QUOTED-PRINTABLE
77 $attachments[$i]['attachment'] = quoted_printable_decode($attachments[$i]['attachment']); 81 $attachments[$i]['attachment'] = quoted_printable_decode($attachments[$i]['attachment']);
78 } 82 }
79 } 83 }
80 - } // for($i = 0; $i < count($structure->parts); $i++)  
81 - } // if(isset($structure->parts) && count($structure->parts)) 84 + }
82 85
  86 + CustomVarDamp::dumpAndDie($attachments);
83 87
84 - if (count($attachments) != 0) { 88 + if (count($attachments) != 0) {
85 89
86 90
87 - foreach ($attachments as $at) { 91 + foreach ($attachments as $at) {
88 92
89 - if ($at['is_attachment'] == 1) {  
90 - //die(__DIR__);  
91 - file_put_contents('test.csv', $at['attachment']); 93 + if ($at['is_attachment'] == 1) {
  94 + //die(__DIR__);
  95 + file_put_contents('test.csv', $at['attachment']);
92 96
  97 + }
93 } 98 }
  99 +
94 } 100 }
95 101
96 } 102 }
97 103
  104 + // echo $output;
98 } 105 }
99 -  
100 - // echo $output; 106 + /* close the connection */
  107 + imap_close($this->connection);
101 } 108 }
102 - /* close the connection */  
103 - imap_close($inbox);  
104 } 109 }
105 } 110 }
106 \ No newline at end of file 111 \ No newline at end of file