Git Product home page Git Product logo

inex / ixp-manager Goto Github PK

View Code? Open in Web Editor NEW
355.0 41.0 159.0 49.83 MB

Full stack web application powering peering at over 200 Internet Exchange Points (IXPs) globally.

Home Page: https://www.ixpmanager.org/

License: GNU General Public License v2.0

PHP 93.85% JavaScript 0.60% Shell 3.14% CSS 0.18% Ruby 0.05% Perl 0.78% Dockerfile 0.08% Hack 0.42% Vue 0.01% SCSS 0.14% Blade 0.76%
ixp-manager ixps internet-exchange-point ixp inex poweringpeering peering

ixp-manager's Introduction

IXP Manager Logo

INEX are pleased to release IXP Manager under an open source license (the GNU Public License V2) which we hope will benefit the wider IXP community, and especially new and small IXPs looking to expand.

CI Tests (ex Dusk) - courtesy of GitHub Actions.

Main Links

Documentation

Our documentation is hosted on GitHub pages: http://docs.ixpmanager.org/.

About IXP Manager

For detailed information, see: https://www.ixpmanager.org/

IXP Manager is a full stack management platform for Internet eXchange Points (IXPs) which includes an administration and customer portal; provides end to end provisioning; and both teaches and implements best practice.

IXP Manager began as an internal project at INEX circa 2007. Over that time it has changed a lot, but always for the better and always to help us run INEX efficiently and with lower overhead. Three of our key requirements as an IXP are security, consistency and reliability. IXP Manager has been designed to help us achieve these.

Our vision for IXP Manager as a technology is that it will enable the creation of IXPs wherever they are required which in turn will create a stronger, open, more robust and better connected internet. And not only is it hoped that IXP Manager will help start these new IXPs but that it will also enable these IXPs to launch from the best place possible: secure by default, proven configurations and designs, implementing best practice.

Our hope is also to gather and foster an IXP Manager community - a place where the many IXPs that use IXP Manager can come and help each other, learn from each other and share their stories. Our website will highlight some of the internet heroes in the IXP space and feature case studies.

Today, IXP Manager is in use by many IXPs around the world - with more being added every month. This is something that gives all of the team at INEX, our community sponsors, the developers and contributors immense pride. It is also quite sobering - it reminds us all to keep all the community in mind when developing and prioritising new features. And it focuses our attention on maintaining the excellent reliability and security standards that have been set over the past two decades.

See also: https://www.inex.ie/

Authors:

Copyright (C) 2009 - 2022 Internet Neutral Exchange Association Company Limited By Guarantee. All Rights Reserved.

License

This file is part of IXP Manager.

IXP Manager is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version v2.0 of the License.

IXP Manager is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License v2.0 along with IXP Manager. If not, see:

http://www.gnu.org/licenses/gpl-2.0.html

ixp-manager's People

Contributors

aduitsis avatar agsq11 avatar aleksbelytskyi avatar barryo avatar d307473 avatar dependabot[bot] avatar elonhub avatar fooelisa avatar griphons avatar jetrodn avatar kieber avatar lindsayhill avatar listerr avatar matejv avatar nickhilliard avatar oasys avatar pierky avatar rawk avatar rlaager avatar rowanthorpe avatar sparkeh avatar will-h avatar yannrobin avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ixp-manager's Issues

Have a "private" directory analogous to the "public" one,with files only loadable by logged in users

At the moment files (e.g. images) placed in the [IXPM_URL]/public directory for use by IXP-Manager are also publicly (not-logged-in) accessible by URL. It would be good to have an analogous [IXPM_URL]/private directory which would be a clearly understood place where IXP-Manager can load images, etc from for a logged in user only (checks login cookie/session). I guess something similar could be achieved by the far more complex method of "wrapping" content inside files with smarty logic in the views directory, but I believe as a simple (and easy-to-understand) option for "non-publicly-viewable" stuff this would also be useful. Example use-case: image files for embedding in documentation pages suitable for logged in users, but not for public browsing...

Remove from mailman list when a contact is deleted

When a contact is deleted, delete from mailing list if marked as subscribed via IXP Manager.

This will help us clean the mailing list as users register and delete old contacts etc.

Possibly add option for a list that is only managed via IXP Manager (i.e, if they are not on IXP manager then they aren't added to the list) as we can configure multiple lists in mailman and have umbrella lists or subscribe them to each other, so one can be managed manually and one via IXP Manager.

Maintenance Announcements / Diary

Suggested new feature:

  • Page for upcoming scheduled maintenance
  • Select affected switches and generate a list of affected members (Name, ASN, IPv4, IPv6 addresses)
  • Add notification when members login, especially affected members, link to maintenance pages.

CSS coping badly with increased page-zoom

When first running the manager my browser's default zoom-level caused the header to expand to two lines (the dropdown box wrapped), which is not such a problem by itself. However, the first line of each page was then being masked by the header, rather than being pushed down as well (obviously some absolute positioning has been used in CSS). As a side-note because it was the first I'd seen of the layout I didn't know how it should look, so it took a while to realise it was just a problem with zoom-levels...

Option to change/turn off default phone number suggestions

Two users have mentioned they have:

"+353 86 876 543 / +353 1 765 4321" in their info for phone/fax info.

Can there be an option to turn this off, or put it underneath the text box instead of in it?

(Also we'd quite like "+44 1234 5678") but this seems to be a library thing?)

Error in contact preview

logged as myself.

User reporting an error

https://portal.lonap.net/contact/view/id/117

Can Login

Notice: Undefined index: row in /srv/ixp/var/templates_c/333dcdbb5c5bafc472d97892bcd0fdb33fb9a335.file.list-column-uid.phtml.php on line 27

Notice: Trying to get property of non-object in /srv/ixp/var/templates_c/333dcdbb5c5bafc472d97892bcd0fdb33fb9a335.file.list-column-uid.phtml.php on line 27

Have tried clearing the cache but error seems to stay.

Seems mostly cosmetic and specific to the contact 'preview' view.

Rob

Error running during database creation.

root@stats:/usr/local/ixp/bin# ./doctrine2-cli.php orm:schema-tool:create
PHP Parse error: syntax error, unexpected '[' in /usr/local/ixp/library/OSS-Framework.git/OSS/Resource/Doctrine2.php on line 88

Parse error: syntax error, unexpected '[' in /usr/local/ixp/library/OSS-Framework.git/OSS/Resource/Doctrine2.php on line 88
root@stats:/usr/local/ixp/bin#

Passwords set/updated via web-interface are not hashed even with hashing set

When I have resources.auth.oss.pwhash = "bcrypt" in application/configs/application.ini if I manually bcrypt-hash user passwords and update them directly in the database there is no problem for authorisation, but when I use the web-interface to modify passwords it resets them as plaintext regardless of the config setting.

Display last changed date/time for details and contacts

In comparing the data from our billing and other databases, we need to know if the member has supplied more recent information.

It would be good to display in the member details and contact details, when the information was last changed.

IRRDB Prefixes with BGPQ3 ERROR: Invalid controller specified (irrdb-cli)

I have installed BGPQ3 and tested
root@portal:/usr/local/ixp# bgpq3 -Jl eltel AS20597
policy-options {
replace:
prefix-list eltel {
81.9.0.0/20;
81.9.32.0/20;
81.9.96.0/20;
81.222.128.0/20;
81.222.192.0/18;
85.249.8.0/21;
85.249.224.0/19;
89.112.0.0/17;
217.170.64.0/19;
}
}

I added the irrdb.bgpq.path = '/usr/local/bin/bgpq3' to application.ini

root@portal:/usr/local/ixp# /usr/local/ixp//bin/ixptool.php -a irrdb-cli.update-prefix-db -v
ERROR: Invalid controller specified (irrdb-cli)
#0 /usr/local/ixp/library/Zend/Controller/Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Simple), Object(Zend_Controller_Response_Cli))
#1 /usr/local/ixp/library/Zend/Application/Bootstrap/Bootstrap.php(97): Zend_Controller_Front->dispatch()
#2 /usr/local/ixp/library/Zend/Application.php(366): Zend_Application_Bootstrap_Bootstrap->run()
#3 /usr/local/ixp/bin/ixptool.php(167): Zend_Application->run()

when I try to update prefix prefix filter table

APC info tool recursively wraps itself

With each click on any of the action buttons in the utility at (URL)/ixp/utils/apcinfo the utility recursively wraps its own frame in a new IXP-Manager header and side panel, resulting in a "hall of mirrors effect" after a few clicks.

MySQL commands in install instructions (& elsewhere?) don't set/warn re: utf8, collation, etc

I don't know how you'd prefer the docs updated for this so I will just raise it as an issue, and perhaps it will not only be a docs issue. Mysql clients and servers (except perhaps the most recent versions) still default to latin1, so in the instructions at https://github.com/inex/IXP-Manager/wiki/Installation-03-Database-Creation I recommend adding --default-character-set=utf8 to the mysql invocation, or better yet utf8mb4 if you consider this guy's warning important enough. This obviously goes hand-in-hand with my PR #57 which ensured PHP connects in utf8 too... and perhaps the perl-scripts need to be checked similarly too?

NB: there is also the issue of default collation (e.g. utf8-general-ci or utf8-unicode-ci, etc).

Suggested extra step in upgrade instructions, and for updating CHANGELOG

I recommend that the upgrade instructions include an extra (fourth) sub-step of step 5 when views-files have been changed, for when someone has skinned them and should mirror any relevant changes across to their skinned-files. The CHANGELOG could also give a heads-up when such changes might be necessary, like it presently does for schema changes, etc, e.g.

... [snip] ...

Schema update required:

CREATE TABLE i_like_traffic_lights (
    id BIGINT AUTO_INCREMENT NOT NULL, 
    colour VARCHAR(255) NOT NULL
)

Views changed:

header.phtml
auth/login.phtml

 (if you have skinned these files, mirror any relevant changes to them)

... [snip] ...

Separate "route server client" checkboxes for IPv4 and IPv6

This is a feature request:

On the page "Home / VLAN Interfaces / Edit VLAN Interface"
the "route server client" checkbox is currently for both, IPv4 and IPv6.

We have a couple of peers that only peer with IPv6 with our route servers,
e.g. interoute, retn ...

To avoid confusion, it would be great to have two separate checkboxes,

IPv4 route server client
IPv6 route server client

and proper bird route server config files for IPv4 and IPv6, later on.

Thanks, Thorleif

Issue Downloading Libraries

Following the instructions I get to the libraries downloading and see the following error.

root@stats:/usr/local/ixp# ./bin/library-init.sh
Smarty exists - skipping!
Bootstrap-Zend-Framework exists - skipping!
Minify exists - skipping!
Bootbox exists - skipping!
Throbber.js exists - skipping!
Zend exists - skipping!
Cloning into ./bin/../library/OSS-Framework.git...
remote: Counting objects: 1396, done.
remote: Compressing objects: 100% (542/542), done.
remote: Total 1396 (delta 1053), reused 1160 (delta 819)
Receiving objects: 100% (1396/1396), 9.84 MiB | 52 KiB/s, done.
Resolving deltas: 100% (1053/1053), done.
error: refs/remotes/origin/master does not point to a valid object!
error: Trying to write ref refs/heads/master with nonexistant object a7c1302db3bd51f77ecd0394a4e1bccdc6987b41
fatal: Cannot update the ref 'HEAD'.
root@stats:/usr/local/ixp#

I am doing this on Debian 6.

I only cloned the repo instead of forking? Could this be the cause?

get-presentation in Meetings->Member View fails

At {IXPM_URL}/meeting/read when I try to click the icon to the right of a presentation heading - namely {IXPM_URL}/meeting-item/get-presentation/id/1 - to download the presentation it fails with the message:

Catchable fatal error: Object of class DateTime could not be converted to string in /opt/ixpmanager/application/controllers/MeetingItemController.php on line 134

I don't know if it helps, but this thread might be loosely related. The discussion is in the context of Symfony, but it seems it is a purely Doctrine2 problem...

Bits in Overall peering graphs

Hey,

when I compare the In- and Out-bits in the "Overall peering graphs",
numbers are different to the values which a generated by MRTG itself in the "ixp_peering-bcix-total-bits.html" file.

See the two screenshots attached. Feature or Bug ?

mrtg_total_mrtg_html
mrtg_total_ixp_manager

Cheers, Thorleif

Sflow Documentation for Configuration

Hi,

with the current Sflow Documentation ( Configuration part)
https://github.com/inex/IXP-Manager/wiki/Installing-Sflow-Support
I'm currently not able to setup a running environment.

Lot's of questions (for ubuntu lts 12.04): e.g.

  • How do I configure the sflow collector daemon?
  • What is the data flow between sflow collector daemon, rrdcached, php web frontend?

And an advanced config section:

  • How can I seperate the sflow collector daemon and data from the ixpmanager server itself

Thanks, Thorleif

Alphabetical sorting of IP addresses rather than numerical

When clicking the arrows on the web-interface to sort ipv[46]addresses, they are sorted "alphabetically", e.g.:

192.168.1.1
192.168.1.10
192.168.1.2

The sort needs to be changed to "numerical" for these to be meaningful. This also impacts on ipv6 addresses, keeping in mind that it needs to "numerically" sort hex-numbers .

Issues with MRTG Overall Peering Graphs / Aggregate Graphs

Hi,

I had several issues in setting up the overall peering graphs.

a. Whitespace Problem

When editing "Home / Infrastructures / Edit -> Infrastructure #1"

in the field "Infrastructure Aggregate Graph Name"

whitespaces should be filtered in the web form already, as the mrtg.cfg file will be broken with white spaces in the target e.g. [ixp_peering-bcix total-bits]

b. capital letters Problem

When editing "Home / Infrastructures / Edit -> Infrastructure #1"

in the field "Infrastructure Aggregate Graph Name"

capital letters should be handled correctly, as the generated files could not be accessed by IXP-Manager frontend later on. e.g. when you use "BCIX-Total" instead of "bcix-total" in the "Infrastructure Aggregate Graph Name"

logs:

Could not load /var/mrtg/ixp_peering-BCIX-Total-bits-month.png for mrtg/retrieveImageAction

c. Missing lines in mrtg.cfg for Directory[ixp_peering-bcix-total-bits] and pkts

Wondering why there are no mrtg config lines
for the directory for the aggregated graphs?

e.g.

Directory[ixp_peering-bcix-total-bits]: aggregate
Directory[ixp_peering-bcix-total-pkts]: aggregate

In my case .png files are put into directory "total" but web frontedn looks in the
mrtg base directory:

logs:

Could not load /var/mrtg/ixp_peering-bcix-total-bits-month.png for mrtg/retrieveImageAction

Files are in /var/mrtg/total/ixp_peering-bcix-total-bits-month.png

(Fixed this with a symbolic link, now)

Thanks, Thorleif

Generic "Forms" capability

Would like a feature to add generic forms feature to send e-mail for example order forms, upgrade requests or other requests.

Would be helpful if it could populate some data about the currently logged in member or user data.

Option to present a list of ports they want the action on, for example to cancel a port, ask which one.

Doesn't need to be anything fancy to start with e.g. just e-mail out.

Future versions could have a new member registration form which doesn't require a login, but populates the information in to the member database as a prospective member.

Config variables for bird route server config files

When running tools/runtime/do-build-rs-configuration-bird.sh
config files for bird are generated.

But there are a couple of variables not filed in /usr/local/etc/bird-rs1-vlan100-ipv4.conf
and /usr/local/etc/bird-rs1-vlan100-ipv6.conf .

define routeserveraddress = ;
router id ;
listen bgp address ;

In which config file these variables have to be defined?

Installation

Hi,

I have copied the files to the folder in my web server but i am unable to install the application. Can you give me like a little tutorial or instructions on what to do

regards
Muga

Debug output shows non-existent Doctrine index type YES_NO being referenced

When "debug" is on the following URLs show varying between one and ~hundred repeats of the following warning: Notice: Undefined index: YES_NO in /[PATH]/[XX].php on line [X]

/customer/details
/customer/unread-notes
/customer/list
/user/list
/contact/list
/contact-group/list
/switch/list
/switch-port/list
/mac-address/list

From scanning the code it seems YES_NO is not defined where other similarly used index types are, but I don't know Doctrine well enough to fix it myself.

Although these are apparently "warnings", I believe that what is causing them is also breaking other things in a less obvious way for me, so diagnosing this might also fix those...

I think the problem is where $FE_COL_TYPES is defined in: library/OSS-Framework.git/OSS/Controller/Action/Trait/Doctrine2Frontend.php, if that helps...

(Optionally/configurably?) keep and display a history of MACs per peer

It would be good if it was possible to store and display not only present MACs, but to keep a history of the changes per peer (similarly to how historical user login times can be stored). If users don't need this info and don't want the bloat there could be a config-option for enabling/disabling...

Some details missing from installation wiki pages

On two pages I think one instruction should change slightly, another should be added, some extra information added, and two typos fixed. I don't know if you want me editing your wiki directly (or if I can?), so I edited the relevant pages on my own fork of the repo. Please feel free to see the diff against those two pages and incorporate the changes if you want. The diff from your latest version to mine (presently) for those two pages is at:

https://github.com/rowanthorpe/IXP-Manager/wiki/_compare/00cbd62b19526b26463a62513d891a2e5e3d9ed4...5f57534650ff0a4be06a5c6a321a1b7e4811b359

Location variable for route server configuration

Feature Request:

Hey, just reviewed the new great route server config documentation coming with version 3.5.3. When I look to the config variables like cid - customer ID and so one, I'm currently missing a variable for the location. The location is associated in IXP Manger with the switch -> port -> IP and there's also a location short name in the DB.

We'd like to put location short name in the neighbor description as we currently (with OpenBGPD) use this to have a good overview where a peer is connected from a BGP Session perspective. And very helpful if there are any switch related = location related incidents. Here an example for our neighbor description:

$locationshortname-$proto-$cshortname

gives a very nice output in OpenBGPD:

>bgpctl sh

Neighbor                   AS    MsgRcvd    MsgSent  OutQ Up/Down  State/PrfRcvd

g60-v4-tirastel          1547      89945     168908     0 04w3d05h      5/50
k15-v6-syseleven        25291     140439    1088605     0 03w0d07h      9/10
k15-v4-syseleven        25291     140457     247021     0 03w0d07h     25/40
k15-v4-telecolumbus     20880     213010     374395     0 06w0d04h     15/50
k15-v6-telecolumbus     20880     137667    1073379     0 06w1d00h      1/20
n15-v6-interoute         8928     255611    2013573     0 05w4d12h    228/500
n15-v6-xamine           50933     320080    2223393     0 04w2d00h      1/10
a36-v4-kde              31334     506046     955990     0 14w0d09h     81/200
a36-v6-kde              31334     505429    2862111     0 14w0d09h     19/20
n15-v6-versatel          8881     524014    2976777     0 18w0d06h     41/90
n15-v4-versatel          8881     532435     999547     0 18w0d06h    497/900
...

config file generation issues with router-cli.gen-server-conf

Hey,

there are some issues with the config file generation,

a. A config file will not be generated, if no file is already available

./bin/ixptool.php -a router-cli.gen-server-conf -p vlanid=1,target=bird,proto=4 --config=/tmp/bird_v4.conf

ERROR: Cannot open / read specificed configuration file

b. Config file stays empty, output only send to STDOUT

touch /tmp/bird_v4.conf

./bin/ixptool.php -a router-cli.gen-server-conf -p vlanid=1,target=bird,proto=4 --config=/tmp/bird_v4.conf

wc -l  /tmp/bird_v4.conf
0 /tmp/bird_v4.conf

This is on ubuntu 12.04 LTS with PHP 5.4.19-1+debphp.org~precise+3

Showing Graphs from MRTG Server

Hey.
Thanks for the s/w I installed it and logged in for the first time. My main agenda for today is to inquire how to display the MRTG graphs. Currently I want to display the aggregate traffic graph on the IXP Manager Homepage.How do i do it on the main config file to pick the graph. Our graphs link is http://mtambo.kixp.or.ke/mrtg/aggregate.html My thinking is if I can manage that one I will be able to do it for the rest of the members.

thanks
Muga

welcome.phtml: genUrl controller generates http:// but not https:// in welcome mail

Hi,

in _skins/bcix/user/email/html/welcome.phtml (derrived from the inex template)
I use the following code to generate the lost pwd link:

<a href="{genUrl controller="auth" action="lost-password"}">{genUrl controller="auth" action="lost-password"}</a>

but http://www.bcix.de/ixp/auth/lost-password instead of https://www.bcix.de/ixp/auth/lost-password is generated.

With <a href="{$options.identity.url}">{$options.identity.url}</a> the correct https link is generated.

Any tips for that?

OSS-Framework fails to pull from get hub

error: refs/remotes/origin/master does not point to a valid object!
error: Trying to write ref refs/heads/master with nonexistant object 8edce2413dca7825f01086f4a286c6299e551d6a
fatal: Cannot update the ref 'HEAD'.

Clean install on CentOS 6.4, followed the recipe to the tee. Things started going wrong here, when I went to clone the submodules.

Recommendations? Looks like this was updated recently

Thanks,
Brian

Errors / Discards in MRTG Overall Peering Graphs / Aggregate Graphs

Hi,

in MRTG Overall Peering Graphs / Aggregate Graphs there also drop down menus
for Errors and Discards. When I look to the mrtg.conf generated by IXP Manager
there are only two targets generated Target[ixp_peering-bcix-total-bits] and Target[ixp_peering-bcix-total-pkts].

Two solutions:

  1. Generate the targets for Errors and Discards in the mrtg.conf
  2. Remove Errors / Discards from the html code for Overall Peering Graphs / Aggregate Graphs

Password policy bug

User profile page and user password recovery pages:

https://xxx/profile/index
https://xxx/auth/reset-password/username/(some _user)/token/8HCHZBKsNV3UBeMjepVxAgLySFnGWQAaJYqPXYGv

Allow short passwords to be set.

User admin page enforces a password length:
https://xxx/contact/edit/uid/99
https://xxxt/default/contact/edit/id/525

  • So if a user creates or changed their password to less than 8 chars, cannot then edit this user's settings because it rejects with: "'pass' is less than 8 characters long".

ixpm_pass_1

Login Passwords are stored and can be browsed in plaintext

The passwords are not hashed in any way during use, or in the database. This is problematic for two reasons:

  • The superuser can browse all of the users' login passwords.
  • If there is a vulnerability (e.g. sql-injection) in any of IXP-Manager's code it would then require no extra work to access/expose all login details.

e-mail to notes script

Possible new feature:
script that can read e-mail on stdin and append a note to a member record.

Needs some mechanism to determine which member and if public or private note entry, e.g by address like "membername-private@notes...." or subject, or by ASN etc.

Subject -> Note title
Message body -> note content.

Am happy to write the mail server integration bits.

This would enable other applications to send notes to ixp-manager.

Adding Customers

I am getting an error when I click the add button for Customers.

Simon

On a clean install adding MACs just seems to loop without getting a form

On a clean IXP-Manager install with typical minimal config, when I visit:

_URL_/ixp/mac-address/add

and try to follow the "Do you want to add one" link: it just reloads the page repeatedly. This was tested on Iceweasel (Firefox) and Chromium (Chrome). Site running on localhost using very recent Mysql and Apache.

HTML / Text only e-mails

Had a couple of moans about HTML only e-mails (for new user registrations etc)..

Is there a way to do text/plain only or have a text alternative?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.